summaryrefslogtreecommitdiff
path: root/lib/person.rb
diff options
context:
space:
mode:
authorSzymon Szukalski <szymon@skas.io>2024-10-24 21:10:57 +1100
committerSzymon Szukalski <szymon@skas.io>2024-10-24 21:10:57 +1100
commit9bc26146397acb5a216e20d5eb55bb2a582fdd3e (patch)
tree4c02f13ca30e673417870114050f7a3d653ad47d /lib/person.rb
parent55475178a8c0e610103e37027cc0a7a387d72f91 (diff)
Implement key data model
- Added classes for Person, Gender, Family, FamilyTree - Replaced FamilyTreeManager with FamilyTree - Add FamilyFactory for seeding the initial FamilyTree for King Arthur and Queen Margaret - Added a RelationshipManager for linking spouses correctly - Refactored ActionFileExecutor for readability - More test coverage
Diffstat (limited to 'lib/person.rb')
-rw-r--r--lib/person.rb57
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/person.rb b/lib/person.rb
new file mode 100644
index 0000000..a40efbe
--- /dev/null
+++ b/lib/person.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+class Person
+ attr_accessor :name, :gender, :spouse
+
+ def initialize(name, gender, spouse = NilPerson.new)
+ @name = name
+ @gender = gender
+ @spouse = spouse
+ end
+
+ def ==(other)
+ other.is_a?(Person) && name == other.name && gender == other.gender && spouse == other.spouse
+ end
+
+ def eql?(other)
+ self == other
+ end
+
+ def hash
+ [name, gender, spouse].hash
+ end
+
+ def to_s
+ "#{name} (#{gender})"
+ end
+end
+
+class NilPerson
+ def name
+ nil
+ end
+
+ def father
+ self
+ end
+
+ def mother
+ self
+ end
+
+ def gender
+ nil
+ end
+
+ def ==(other)
+ other.is_a?(NilPerson)
+ end
+
+ def eql?(other)
+ self == other
+ end
+
+ def to_s
+ ''
+ end
+end