diff options
Diffstat (limited to 'lib/person.rb')
| -rw-r--r-- | lib/person.rb | 57 |
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 |
