diff options
Diffstat (limited to 'lib/family_factory.rb')
| -rw-r--r-- | lib/family_factory.rb | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/lib/family_factory.rb b/lib/family_factory.rb new file mode 100644 index 0000000..a42c5ea --- /dev/null +++ b/lib/family_factory.rb @@ -0,0 +1,155 @@ +# frozen_string_literal: true + +require_relative 'family' +require_relative 'person' +require_relative 'gender' +require_relative 'relationship_manager' + +class FamilyFactory + def initialize + @people = {} + @relationship_manager = RelationshipManager.instance + end + + def create_families + [ + create_queen_margaret_and_king_arthur_family, + create_flora_and_bill_family, + create_victoire_and_ted_family, + create_percy_and_audrey_family, + create_ronald_and_helen_family, + create_malfoy_and_rose_family, + create_ginerva_and_harry_family, + create_darcy_and_james_family, + create_alice_and_albus_family + ] + end + + private + + def find_or_create_person(name, gender) + return @people[name] if @people.key?(name) + + person = Person.new(name, gender) + @people[name] = person + end + + def find_or_create_male(name) + find_or_create_person(name, Gender::MALE) + end + + def find_or_create_female(name) + find_or_create_person(name, Gender::FEMALE) + end + + def create_queen_margaret_and_king_arthur_family + queen_margaret = find_or_create_female('Queen Margaret') + king_arthur = find_or_create_male('King Arthur') + + @relationship_manager.link_spouses(queen_margaret, king_arthur) + + bill = find_or_create_male('Bill') + charlie = find_or_create_male('Charlie') + percy = find_or_create_male('Percy') + ronald = find_or_create_male('Ronald') + ginerva = find_or_create_female('Ginerva') + + Family.new(queen_margaret, king_arthur, [bill, charlie, percy, ronald, ginerva]) + end + + def create_flora_and_bill_family + bill = find_or_create_male('Bill') + flora = find_or_create_female('Flora') + + @relationship_manager.link_spouses(flora, bill) + + victoire = find_or_create_female('Victoire') + dominique = find_or_create_female('Dominique') + louis = find_or_create_male('Louis') + + Family.new(flora, bill, [victoire, dominique, louis]) + end + + def create_victoire_and_ted_family + victoire = find_or_create_female('Victoire') + ted = find_or_create_male('Ted') + + @relationship_manager.link_spouses(victoire, ted) + + remus = find_or_create_male('Remus') + + Family.new(victoire, ted, [remus]) + end + + def create_percy_and_audrey_family + percy = find_or_create_male('Percy') + audrey = find_or_create_female('Audrey') + + @relationship_manager.link_spouses(audrey, percy) + + molly = find_or_create_female('Molly') + lucy = find_or_create_female('Lucy') + + Family.new(audrey, percy, [molly, lucy]) + end + + def create_ronald_and_helen_family + ronald = find_or_create_male('Ronald') + helen = find_or_create_female('Helen') + + @relationship_manager.link_spouses(helen, ronald) + + rose = find_or_create_female('Rose') + hugo = find_or_create_male('Hugo') + + Family.new(helen, ronald, [rose, hugo]) + end + + def create_malfoy_and_rose_family + malfoy = find_or_create_male('Malfoy') + rose = find_or_create_female('Rose') + + @relationship_manager.link_spouses(rose, malfoy) + + draco = find_or_create_male('Draco') + aster = find_or_create_female('Aster') + + Family.new(rose, malfoy, [draco, aster]) + end + + def create_ginerva_and_harry_family + ginerva = find_or_create_female('Ginerva') + harry = find_or_create_male('Harry') + + @relationship_manager.link_spouses(ginerva, harry) + + james = find_or_create_male('James') + albus = find_or_create_male('Albus') + lily = find_or_create_female('Lily') + + Family.new(ginerva, harry, [james, albus, lily]) + end + + def create_darcy_and_james_family + darcy = find_or_create_female('Darcy') + james = find_or_create_male('James') + + @relationship_manager.link_spouses(darcy, james) + + william = find_or_create_male('William') + + Family.new(darcy, james, [william]) + end + + def create_alice_and_albus_family + alice = find_or_create_female('Alice') + albus = find_or_create_male('Albus') + + @relationship_manager.link_spouses(alice, albus) + + ron = find_or_create_male('Ron') + ginny = find_or_create_female('Ginny') + + Family.new(alice, albus, [ron, ginny]) + end +end |
