From 9bc26146397acb5a216e20d5eb55bb2a582fdd3e Mon Sep 17 00:00:00 2001 From: Szymon Szukalski Date: Thu, 24 Oct 2024 21:10:57 +1100 Subject: 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 --- lib/person.rb | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 lib/person.rb (limited to 'lib/person.rb') 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 -- cgit v1.2.3