From bdfe656a8933bb1fa419cbf8c114176ee597ed62 Mon Sep 17 00:00:00 2001 From: murphy-ariel Date: Mon, 10 Apr 2017 17:18:56 -0400 Subject: [PATCH 1/3] Seed script generates draws in each stage Resolves #530 --- db/seeds.rb | 5 ++- lib/seed/draw_generator.rb | 11 +++--- lib/seed/group_generator.rb | 31 +++++++++++++++ lib/seed/lottery_draw_generator.rb | 39 +++++++++++++++++++ lib/seed/pre_lottery_draw_generator.rb | 21 ++++++++++ lib/seed/suite_selection_draw_generator.rb | 23 +++++++++++ spec/lib/group_generator_spec.rb | 14 +++++++ spec/lib/lottery_draw_generator_spec.rb | 16 ++++++++ spec/lib/pre_lottery_draw_generator_spec.rb | 16 ++++++++ .../suite_selection_draw_generator_spec.rb | 17 ++++++++ 10 files changed, 187 insertions(+), 6 deletions(-) create mode 100644 lib/seed/group_generator.rb create mode 100644 lib/seed/lottery_draw_generator.rb create mode 100644 lib/seed/pre_lottery_draw_generator.rb create mode 100644 lib/seed/suite_selection_draw_generator.rb create mode 100644 spec/lib/group_generator_spec.rb create mode 100644 spec/lib/lottery_draw_generator_spec.rb create mode 100644 spec/lib/pre_lottery_draw_generator_spec.rb create mode 100644 spec/lib/suite_selection_draw_generator_spec.rb diff --git a/db/seeds.rb b/db/seeds.rb index e89bab9b..612c2b9f 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + # rubocop:disable Rails/Output puts 'Generating seed data....' @@ -24,6 +25,8 @@ # fix this eventually so that we never generate empty suites Suite.where(size: 0).destroy_all -Generator.generate(model: 'draw', count: 3) +PreLotteryDrawGenerator.generate +LotteryDrawGenerator.generate +SuiteSelectionDrawGenerator.generate puts 'Finished!' diff --git a/lib/seed/draw_generator.rb b/lib/seed/draw_generator.rb index 33e984d0..ac1c42d3 100644 --- a/lib/seed/draw_generator.rb +++ b/lib/seed/draw_generator.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + # Seed script generator for Draws class DrawGenerator def self.generate(**overrides) @@ -10,22 +11,22 @@ def initialize(overrides: {}) end def generate - DrawCreator.new(params).create![:object] + Draw.create(params) end private - attr_reader :params + attr_reader :params, :suites def gen_params(overrides: {}) check_member_existence - @params ||= { suites: Suite.all.sample(3), - students: User.where(role: 'student', draw_id: nil).sample(5), + @params ||= { suites: suites, name: "#{FFaker::Music.artist} Draw" }.merge(overrides) end def check_member_existence - 5.times { SuiteGenerator.generate } unless Suite.all.count >= 5 + @suites = Array.new(5) { SuiteGenerator.generate } + suites.each { |s| RoomGenerator.generate(suite: s) } 8.times { UserGenerator.generate } unless User.all.count >= 8 end end diff --git a/lib/seed/group_generator.rb b/lib/seed/group_generator.rb new file mode 100644 index 00000000..482535fe --- /dev/null +++ b/lib/seed/group_generator.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +# Seed script generator for Suites +class GroupGenerator + def self.generate(**params) + new(**params).generate + end + + def initialize(draw:, overrides: {}) + gen_params(draw: draw, overrides: overrides) + end + + def generate + Group.create!(params) + end + + private + + attr_reader :params + + def gen_params(draw:, overrides: {}) + size = draw.suite_sizes.sample + members = Array.new(size) do + UserGenerator.generate(draw: draw, intent: 'on_campus') + end + @params ||= { leader: members.sample, + size: size, + members: members, + draw: draw }.merge!(overrides) + end +end diff --git a/lib/seed/lottery_draw_generator.rb b/lib/seed/lottery_draw_generator.rb new file mode 100644 index 00000000..1bb418fa --- /dev/null +++ b/lib/seed/lottery_draw_generator.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +# Seed script generator for Draws +class LotteryDrawGenerator + def self.generate(**overrides) + new(overrides: overrides).generate + end + + def initialize(overrides: {}); end + + def generate + create_draw_params + make_lottery_draw + end + + private + + def create_draw_params + suites = Array.new(5) { SuiteGenerator.generate } + suites.each { |s| RoomGenerator.generate(suite: s) } + @params ||= { suites: suites, + name: "#{FFaker::Music.artist} Draw" } + end + + def make_lottery_draw + Draw.create!(params).tap do |d| + d.update(status: 'pre_lottery') + groups = Array.new(3) do + GroupGenerator.generate(draw: d) + end + groups.each do |g| + GroupLocker.lock(group: g) + end + DrawLotteryStarter.start(draw: d) + end + end + + attr_reader :params +end diff --git a/lib/seed/pre_lottery_draw_generator.rb b/lib/seed/pre_lottery_draw_generator.rb new file mode 100644 index 00000000..ddbaf4f5 --- /dev/null +++ b/lib/seed/pre_lottery_draw_generator.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +# Seed script generator for Draws +class PreLotteryDrawGenerator + def self.generate(**overrides) + new(overrides: overrides).generate + end + + def initialize(overrides: {}); end + + def generate + DrawGenerator.generate.tap do |d| + 3.times { GroupGenerator.generate(draw: d) } + d.update(status: 'pre_lottery') + end + end + + private + + attr_reader :params +end diff --git a/lib/seed/suite_selection_draw_generator.rb b/lib/seed/suite_selection_draw_generator.rb new file mode 100644 index 00000000..186c804b --- /dev/null +++ b/lib/seed/suite_selection_draw_generator.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +# Seed script generator for Draws +class SuiteSelectionDrawGenerator + def self.generate(**overrides) + new(overrides: overrides).generate + end + + def initialize(overrides: {}); end + + def generate + LotteryDrawGenerator.generate.tap do |d| + d.groups.each do |g| + g.lottery_number = (g.id / 2).round + end + d.update(status: 'suite_selection') + end + end + + private + + attr_reader :params +end diff --git a/spec/lib/group_generator_spec.rb b/spec/lib/group_generator_spec.rb new file mode 100644 index 00000000..eaced2de --- /dev/null +++ b/spec/lib/group_generator_spec.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe GroupGenerator do + context 'creating' do + it 'makes a new group' do + draw = FactoryGirl.create(:draw) + draw.suites << FactoryGirl.create(:suite, size: 3) + expect { described_class.generate(draw: draw) }.to \ + change { Group.count }.by(1) + end + end +end diff --git a/spec/lib/lottery_draw_generator_spec.rb b/spec/lib/lottery_draw_generator_spec.rb new file mode 100644 index 00000000..b11347e7 --- /dev/null +++ b/spec/lib/lottery_draw_generator_spec.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe LotteryDrawGenerator do + context 'creating' do + it 'makes a new draw' do + expect { described_class.generate }.to \ + change { Draw.count }.by(1) + end + + it 'makes the draw be in pre-lottery' do + expect(described_class.generate) .to be_lottery + end + end +end diff --git a/spec/lib/pre_lottery_draw_generator_spec.rb b/spec/lib/pre_lottery_draw_generator_spec.rb new file mode 100644 index 00000000..dbcc31d1 --- /dev/null +++ b/spec/lib/pre_lottery_draw_generator_spec.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe PreLotteryDrawGenerator do + context 'creating' do + it 'makes a new draw' do + expect { described_class.generate }.to \ + change { Draw.count }.by(1) + end + + it 'makes the draw be in pre-lottery' do + expect(described_class.generate) .to be_pre_lottery + end + end +end diff --git a/spec/lib/suite_selection_draw_generator_spec.rb b/spec/lib/suite_selection_draw_generator_spec.rb new file mode 100644 index 00000000..3da7907c --- /dev/null +++ b/spec/lib/suite_selection_draw_generator_spec.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe SuiteSelectionDrawGenerator do + context 'creating' do + it 'makes a new draw' do + expect { described_class.generate }.to \ + change { Draw.count }.by(1) + end + + it 'makes the draw be in pre-lottery' do + expect(described_class.generate) .to \ + be_suite_selection + end + end +end From d0fb61c60a865fed9214937ab2d6aab5cc87870f Mon Sep 17 00:00:00 2001 From: murphy-ariel Date: Sat, 22 Apr 2017 15:37:06 -0400 Subject: [PATCH 2/3] 530 fixes requested changes --- lib/seed/draw_generator.rb | 2 +- lib/seed/group_generator.rb | 4 ++-- lib/seed/lottery_draw_generator.rb | 19 ++++++++++--------- lib/seed/pre_lottery_draw_generator.rb | 11 ++++------- lib/seed/suite_selection_draw_generator.rb | 7 ++----- spec/lib/lottery_draw_generator_spec.rb | 2 +- spec/lib/pre_lottery_draw_generator_spec.rb | 2 +- .../suite_selection_draw_generator_spec.rb | 2 +- 8 files changed, 22 insertions(+), 27 deletions(-) diff --git a/lib/seed/draw_generator.rb b/lib/seed/draw_generator.rb index ac1c42d3..47c73631 100644 --- a/lib/seed/draw_generator.rb +++ b/lib/seed/draw_generator.rb @@ -7,7 +7,7 @@ def self.generate(**overrides) end def initialize(overrides: {}) - gen_params(overrides: overrides) + gen_params(overrides) end def generate diff --git a/lib/seed/group_generator.rb b/lib/seed/group_generator.rb index 482535fe..6bfd8c61 100644 --- a/lib/seed/group_generator.rb +++ b/lib/seed/group_generator.rb @@ -20,8 +20,8 @@ def generate def gen_params(draw:, overrides: {}) size = draw.suite_sizes.sample - members = Array.new(size) do - UserGenerator.generate(draw: draw, intent: 'on_campus') + members=Array.new(size) do |d| + UserGenerator.generate(draw: draw, intent: 'on_campus') end @params ||= { leader: members.sample, size: size, diff --git a/lib/seed/lottery_draw_generator.rb b/lib/seed/lottery_draw_generator.rb index 1bb418fa..b79f28b3 100644 --- a/lib/seed/lottery_draw_generator.rb +++ b/lib/seed/lottery_draw_generator.rb @@ -6,27 +6,29 @@ def self.generate(**overrides) new(overrides: overrides).generate end - def initialize(overrides: {}); end + def initialize(overrides: {}); end - def generate - create_draw_params - make_lottery_draw + def generate(overrides: {}) + create_draw_params(overrides: overrides) + make_lottery_draw(overrides: overrides) end private - def create_draw_params + attr_reader :params + + def create_draw_params(overrides: {}) suites = Array.new(5) { SuiteGenerator.generate } suites.each { |s| RoomGenerator.generate(suite: s) } @params ||= { suites: suites, - name: "#{FFaker::Music.artist} Draw" } + name: "#{FFaker::Music.artist} Draw" }.merge!(overrides) end - def make_lottery_draw + def make_lottery_draw(overrides: {}) Draw.create!(params).tap do |d| d.update(status: 'pre_lottery') groups = Array.new(3) do - GroupGenerator.generate(draw: d) + GroupGenerator.generate(draw: d, overrides: overrides) end groups.each do |g| GroupLocker.lock(group: g) @@ -35,5 +37,4 @@ def make_lottery_draw end end - attr_reader :params end diff --git a/lib/seed/pre_lottery_draw_generator.rb b/lib/seed/pre_lottery_draw_generator.rb index ddbaf4f5..9afed573 100644 --- a/lib/seed/pre_lottery_draw_generator.rb +++ b/lib/seed/pre_lottery_draw_generator.rb @@ -6,16 +6,13 @@ def self.generate(**overrides) new(overrides: overrides).generate end - def initialize(overrides: {}); end + def initialize(overrides: {}); end - def generate - DrawGenerator.generate.tap do |d| - 3.times { GroupGenerator.generate(draw: d) } + def generate(overrides: {}) + DrawGenerator.generate(overrides: overrides).tap do |d| + 3.times { GroupGenerator.generate(draw: d, overrides: overrides) } d.update(status: 'pre_lottery') end end - private - - attr_reader :params end diff --git a/lib/seed/suite_selection_draw_generator.rb b/lib/seed/suite_selection_draw_generator.rb index 186c804b..2f875ccf 100644 --- a/lib/seed/suite_selection_draw_generator.rb +++ b/lib/seed/suite_selection_draw_generator.rb @@ -8,8 +8,8 @@ def self.generate(**overrides) def initialize(overrides: {}); end - def generate - LotteryDrawGenerator.generate.tap do |d| + def generate(overrides: {}) + LotteryDrawGenerator.generate(overrides: overrides).tap do |d| d.groups.each do |g| g.lottery_number = (g.id / 2).round end @@ -17,7 +17,4 @@ def generate end end - private - - attr_reader :params end diff --git a/spec/lib/lottery_draw_generator_spec.rb b/spec/lib/lottery_draw_generator_spec.rb index b11347e7..740af07e 100644 --- a/spec/lib/lottery_draw_generator_spec.rb +++ b/spec/lib/lottery_draw_generator_spec.rb @@ -10,7 +10,7 @@ end it 'makes the draw be in pre-lottery' do - expect(described_class.generate) .to be_lottery + expect(described_class.generate).to be_lottery end end end diff --git a/spec/lib/pre_lottery_draw_generator_spec.rb b/spec/lib/pre_lottery_draw_generator_spec.rb index dbcc31d1..2b77b465 100644 --- a/spec/lib/pre_lottery_draw_generator_spec.rb +++ b/spec/lib/pre_lottery_draw_generator_spec.rb @@ -10,7 +10,7 @@ end it 'makes the draw be in pre-lottery' do - expect(described_class.generate) .to be_pre_lottery + expect(described_class.generate).to be_pre_lottery end end end diff --git a/spec/lib/suite_selection_draw_generator_spec.rb b/spec/lib/suite_selection_draw_generator_spec.rb index 3da7907c..d8962aef 100644 --- a/spec/lib/suite_selection_draw_generator_spec.rb +++ b/spec/lib/suite_selection_draw_generator_spec.rb @@ -10,7 +10,7 @@ end it 'makes the draw be in pre-lottery' do - expect(described_class.generate) .to \ + expect(described_class.generate).to \ be_suite_selection end end From 754125673bc97b46b149919a2123dda89bdf8183 Mon Sep 17 00:00:00 2001 From: murphy-ariel Date: Sat, 22 Apr 2017 15:41:54 -0400 Subject: [PATCH 3/3] 530 style issues after requested changes --- lib/seed/group_generator.rb | 4 ++-- lib/seed/lottery_draw_generator.rb | 3 +-- lib/seed/pre_lottery_draw_generator.rb | 3 +-- lib/seed/suite_selection_draw_generator.rb | 1 - 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/lib/seed/group_generator.rb b/lib/seed/group_generator.rb index 6bfd8c61..29f0923d 100644 --- a/lib/seed/group_generator.rb +++ b/lib/seed/group_generator.rb @@ -20,8 +20,8 @@ def generate def gen_params(draw:, overrides: {}) size = draw.suite_sizes.sample - members=Array.new(size) do |d| - UserGenerator.generate(draw: draw, intent: 'on_campus') + members = Array.new(size) do |_d| + UserGenerator.generate(draw: draw, intent: 'on_campus') end @params ||= { leader: members.sample, size: size, diff --git a/lib/seed/lottery_draw_generator.rb b/lib/seed/lottery_draw_generator.rb index b79f28b3..350d3c9e 100644 --- a/lib/seed/lottery_draw_generator.rb +++ b/lib/seed/lottery_draw_generator.rb @@ -6,7 +6,7 @@ def self.generate(**overrides) new(overrides: overrides).generate end - def initialize(overrides: {}); end + def initialize(overrides: {}); end def generate(overrides: {}) create_draw_params(overrides: overrides) @@ -36,5 +36,4 @@ def make_lottery_draw(overrides: {}) DrawLotteryStarter.start(draw: d) end end - end diff --git a/lib/seed/pre_lottery_draw_generator.rb b/lib/seed/pre_lottery_draw_generator.rb index 9afed573..8314dea4 100644 --- a/lib/seed/pre_lottery_draw_generator.rb +++ b/lib/seed/pre_lottery_draw_generator.rb @@ -6,7 +6,7 @@ def self.generate(**overrides) new(overrides: overrides).generate end - def initialize(overrides: {}); end + def initialize(overrides: {}); end def generate(overrides: {}) DrawGenerator.generate(overrides: overrides).tap do |d| @@ -14,5 +14,4 @@ def generate(overrides: {}) d.update(status: 'pre_lottery') end end - end diff --git a/lib/seed/suite_selection_draw_generator.rb b/lib/seed/suite_selection_draw_generator.rb index 2f875ccf..b055aa79 100644 --- a/lib/seed/suite_selection_draw_generator.rb +++ b/lib/seed/suite_selection_draw_generator.rb @@ -16,5 +16,4 @@ def generate(overrides: {}) d.update(status: 'suite_selection') end end - end