summaryrefslogtreecommitdiff
path: root/lib/person.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/person.rb')
-rw-r--r--lib/person.rb20
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/person.rb b/lib/person.rb
index 8571754..9a3dcb6 100644
--- a/lib/person.rb
+++ b/lib/person.rb
@@ -2,27 +2,47 @@
require_relative 'nil_person'
+# Person class representing an individual with a name, gender, and spouse.
class Person
attr_accessor :name, :gender, :spouse
+ # Initializes a new Person object.
+ #
+ # @param name [String] The name of the person.
+ # @param gender [String] The gender of the person.
+ # @param spouse [Person, NilPerson] The spouse of the person, defaults to NilPerson.
def initialize(name, gender, spouse = NilPerson.new)
@name = name
@gender = gender
@spouse = spouse
end
+ # Checks equality with another object.
+ #
+ # @param other [Object] The object to compare with.
+ # @return [Boolean] True if the other object is a Person with the same name, gender, and spouse, false otherwise.
def ==(other)
other.is_a?(Person) && name == other.name && gender == other.gender && spouse == other.spouse
end
+ # Checks equality with another object (alias for ==).
+ #
+ # @param other [Object] The object to compare with.
+ # @return [Boolean] True if the other object is a Person with the same name, gender, and spouse, false otherwise.
def eql?(other)
self == other
end
+ # Computes the hash code for the Person object.
+ #
+ # @return [Integer] The hash code based on the name, gender, and spouse.
def hash
[name, gender, spouse].hash
end
+ # Returns a string representation of the Person.
+ #
+ # @return [String] The string representation in the format "name (gender)".
def to_s
"#{name} (#{gender})"
end