summaryrefslogtreecommitdiff
path: root/lib/family_factory.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/family_factory.rb')
-rw-r--r--lib/family_factory.rb155
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