From 73cff897a314327a9077c5d5d5e87cf1434ac480 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Sun, 11 Mar 2012 23:24:45 -0400 Subject: [PATCH] Might actually have tournament round filling working correctly (?) --- rails/map-mash/lib/mash_tournament_builder.rb | 31 ++++++++++++++----- .../spec/lib/mash_tournament_builder_spec.rb | 24 +++++++------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/rails/map-mash/lib/mash_tournament_builder.rb b/rails/map-mash/lib/mash_tournament_builder.rb index 7d5aa78..a6415f0 100644 --- a/rails/map-mash/lib/mash_tournament_builder.rb +++ b/rails/map-mash/lib/mash_tournament_builder.rb @@ -1,13 +1,22 @@ +require 'logger' + + class MashTournamentBuilder attr_accessor :tournament, :tournament_model, :round_model attr_accessor :map_model, :mash_model - def initialize(tournament, tournament_model, round_model, map_model, mash_model) + def initialize(tournament, tournament_model, round_model, + map_model, mash_model) @tournament = tournament @tournament_model = tournament_model @round_model = round_model @map_model = map_model @mash_model = mash_model + @logger = Logger.new( + File.expand_path( + '../log/mash-tournament-builder.log', File.dirname(__FILE__) + ) + ) end def valid_number_of_contenders?(n_contenders) @@ -43,14 +52,18 @@ class MashTournamentBuilder private def create_round(round_number, n_contenders) - round = @round_model.new( + round_options = { :mash_tournament_id => @tournament.id, :number => round_number, :mash_count => n_contenders / 2 - ) + } + @logger.info("Creating round #{round_number} of #{n_contenders} contenders " + + "with options: #{round_options.inspect}") + + round = @round_model.new(round_options) round.save! - n_contenders.times do + round.mash_count.times do @mash_model.new( :mash_tournament_id => @tournament.id, :mash_tournament_round_id => round.id @@ -86,19 +99,21 @@ class MashTournamentBuilder end def assign_maps_for_round_one(round) - pool = @map_model.all( + pool_options = { :order => 'RANDOM()', :limit => round.mash_count * 2 - ) + } + @logger.info("Allocating pool with options: #{pool_options.inspect}") + pool = @map_model.all(pool_options) - logger.info("Populating mashes from pool: #{pool.inspect}") + @logger.info("Populating mashes from pool: #{pool.inspect}") filled_in = [] round.mashes.each do |mash| map_a = pool.pop map_b = pool.pop - logger.info("Assigning `map_a` from #{map_a.inspect}, " + + @logger.info("Assigning `map_a` from #{map_a.inspect}, " + "`map_b` from #{map_b.inspect} to mash #{mash.inspect}") mash.map_a = map_a diff --git a/rails/map-mash/spec/lib/mash_tournament_builder_spec.rb b/rails/map-mash/spec/lib/mash_tournament_builder_spec.rb index 63d1fa3..ce2b3a6 100644 --- a/rails/map-mash/spec/lib/mash_tournament_builder_spec.rb +++ b/rails/map-mash/spec/lib/mash_tournament_builder_spec.rb @@ -1,14 +1,14 @@ require 'spec_helper' describe MashTournamentBuilder do - let(:subject) do + let(ENV['MOCK'].nil? ? :subject : :real_subject) do MashTournamentBuilder.new( MashTournament.make(:requester => Requester.make), MashTournament, MashTournamentRound, Map, Mash ) end - let(:mock_subject) do + let(ENV['MOCK'].nil? ? :mock_subject : :subject) do @tournament = mock(Object) @tournament_model = mock(Object) @round_model = mock(Object) @@ -21,6 +21,13 @@ describe MashTournamentBuilder do ) end + before(:all) do + subject.map_model.destroy_all + 40.times do + subject.map_model.make.save + end + end + context 'creating rounds' do it 'should reject invalid numbers of contenders' do [11, 24, 40].each do |n| @@ -30,13 +37,6 @@ describe MashTournamentBuilder do end end - before(:all) do - subject.map_model.destroy_all - 40.times do - subject.map_model.make.save - end - end - [[8, 3], [16, 4], [32, 5]].each do |n_contenders,n_rounds| context "for #{n_contenders} total contenders" do it "should create #{n_rounds} rounds" do @@ -49,13 +49,13 @@ describe MashTournamentBuilder do context 'filling in rounds' do before(:each) do - subject.id.should_not be_nil + subject.tournament.id.should_not be_nil subject.create_rounds_for_contenders(8) end - xit 'should fill in every map for every mash in a given round' do + it 'should fill in every map for every mash in a given round' do subject.fill_in_next_round - subject.round(1).mashes.each do |mash| + subject.tournament.round(1).mashes.each do |mash| mash.map_a.should_not be_nil mash.map_b.should_not be_nil end