blob: 2c1acca1ef2c72e787391aa043197d54e5703d75 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# frozen_string_literal: true
require_relative 'person'
class Family
attr_reader :mother, :father, :children
def initialize(mother = NilPerson.new, father = NilPerson.new, children = [])
raise ArgumentError, 'Mother must be female' if !mother.is_a?(NilPerson) && mother.gender != Gender::FEMALE
raise ArgumentError, 'Father must be male' if !father.is_a?(NilPerson) && father.gender != Gender::MALE
@mother = mother
@father = father
@children = children
end
def assign_mother(mother)
raise ArgumentError, 'Mother must be female' if mother.gender != Gender::FEMALE
@mother = mother
end
def assign_father(father)
raise ArgumentError, 'Father must be male' if father.gender != Gender::MALE
@father = father
end
def add_child(child)
@children << child unless @children.include?(child)
end
def get_siblings(person)
@children.reject { |child| child == person }
end
def to_s
mother_str = mother.is_a?(NilPerson) ? 'UNKNOWN' : mother.name
father_str = father.is_a?(NilPerson) ? 'UNKNOWN' : father.name
children_str = children.empty? ? 'NONE' : children.map(&:name).join(', ')
"Family: Mother: #{mother_str}, Father: #{father_str}, Children: #{children_str}"
end
end
|