diff --git a/rails/map-mash/app/controllers/mash_tournaments_controller.rb b/rails/map-mash/app/controllers/mash_tournaments_controller.rb index 9df47ac..8fe9c82 100644 --- a/rails/map-mash/app/controllers/mash_tournaments_controller.rb +++ b/rails/map-mash/app/controllers/mash_tournaments_controller.rb @@ -39,9 +39,12 @@ class MashTournamentsController < ApplicationController @mash_tournament = MashTournament.new( :requester => Requester.new(:ip => request.remote_ip) ) - respond_to do |format| - if @mash_tournament.save && @mash_tournament.create_rounds_for_contenders(8) + if @mash_tournament.save && ( + @mash_tournament.builder.create_rounds_for_contenders(8) == 3 + ) && ( + @mash_tournament.builder.fill_in_next_round.length == 4 + ) flash[:notice] = "Let's start mashing!" format.html { redirect_to :controller => 'mashes', :action => 'new' } else diff --git a/rails/map-mash/app/controllers/mashes_controller.rb b/rails/map-mash/app/controllers/mashes_controller.rb index 91b6b16..5aa68d4 100644 --- a/rails/map-mash/app/controllers/mashes_controller.rb +++ b/rails/map-mash/app/controllers/mashes_controller.rb @@ -24,27 +24,18 @@ class MashesController < ApplicationController end end - def create + def update return if not already_registered?(request.remote_ip) - - mash_params = params[:mash].clone logger.info("Got params: #{params.inspect}") - requester = Requester.find_by_ip(request.remote_ip) - tournament = requester.mash_tournaments.first - mash_params[:tournament_id] = tournament.id - - logger.info("Creating mash with: #{mash_params.inspect}") - @mash = Mash.new(mash_params) - - @winner = Map.find(@mash.winner_id.to_i) - @winner.points += 1 + @mash = Mash.find(params[:id]) + @mash.winner = Map.find((params[:mash][:winner_id] || -1).to_i) logger.info("About to save #{@mash.inspect}") respond_to do |format| - if @winner.save && @mash.save - flash[:notice] = 'Mash was successfully created.' + if @mash.save + flash[:notice] = 'Mashed!' format.html { redirect_to(:action => 'new') } else format.html { render :action => 'new' } diff --git a/rails/map-mash/app/models/mash.rb b/rails/map-mash/app/models/mash.rb index bd70266..8846de2 100644 --- a/rails/map-mash/app/models/mash.rb +++ b/rails/map-mash/app/models/mash.rb @@ -5,11 +5,9 @@ class Mash < ActiveRecord::Base has_one :tournament, :class_name => 'MashTournament' has_one :round, :class_name => 'MashTournamentRound' - named_scope :unplayed, { - :conditions => %{ + named_scope :unplayed, :conditions => [%{ winner_id IS NULL AND map_a_id IS NOT NULL AND map_b_id IS NOT NULL - } - } + }] end diff --git a/rails/map-mash/app/models/mash_tournament.rb b/rails/map-mash/app/models/mash_tournament.rb index 03291be..8aba358 100644 --- a/rails/map-mash/app/models/mash_tournament.rb +++ b/rails/map-mash/app/models/mash_tournament.rb @@ -4,11 +4,21 @@ class MashTournament < ActiveRecord::Base has_many :rounds, :class_name => 'MashTournamentRound' def next_unplayed_mash - self.mashes.unplayed.first + mash = self.mashes.unplayed.first + if not mash + filled = self.builder.fill_in_next_round + if filled + return self.mashes.unplayed.first + else + return nil + end + else + return mash + end end def done? - true + self.rounds.collect(&:done?).uniq == [true] end def round(number = 0) @@ -16,4 +26,10 @@ class MashTournament < ActiveRecord::Base :conditions => {:number => number} ) end + + def builder + MashTournamentBuilder.new( + self, MashTournament, MashTournamentRound, Map, Mash + ) + end end diff --git a/rails/map-mash/app/views/mash_tournaments/show.html.erb b/rails/map-mash/app/views/mash_tournaments/show.html.erb deleted file mode 100644 index aaa5394..0000000 --- a/rails/map-mash/app/views/mash_tournaments/show.html.erb +++ /dev/null @@ -1,10 +0,0 @@ - - - -<%= link_to 'New!', :controller => 'mash_tournaments', :action => 'new' %> diff --git a/rails/map-mash/app/views/mash_tournaments/show.html.haml b/rails/map-mash/app/views/mash_tournaments/show.html.haml new file mode 100644 index 0000000..4eaee88 --- /dev/null +++ b/rails/map-mash/app/views/mash_tournaments/show.html.haml @@ -0,0 +1,11 @@ +- @mash_tournament.rounds.reverse.each do |round| + %h2 Round #{round.number} + - round.mashes.each do |mash| + %ul + - if mash.map_a.present? && mash.map_b.present? && mash.winner.present? + %li + #{mash.map_a.name} vs. #{mash.map_b.name}, winner = + %strong #{mash.winner.name} + + += link_to 'New!', :controller => 'mash_tournaments', :action => 'new' diff --git a/rails/map-mash/app/views/mashes/new.html.erb b/rails/map-mash/app/views/mashes/new.html.erb deleted file mode 100644 index a1cc236..0000000 --- a/rails/map-mash/app/views/mashes/new.html.erb +++ /dev/null @@ -1,32 +0,0 @@ -<% content_for :head_js do %> - -<% end %> - -

Mash the Maps!

-

Choose your fave.

- -<% form_for(@mash) do |f| %> - <%= f.error_messages %> - -
-
- -
-
- -
-
- - <%= f.hidden_field :map_a_id, :value => @map_a.id %> - <%= f.hidden_field :map_b_id, :value => @map_b.id %> - <%= f.hidden_field :winner_id, :value => -1 %> -<% end %> - -<%= link_to 'Back', mashes_path %> diff --git a/rails/map-mash/app/views/mashes/new.html.haml b/rails/map-mash/app/views/mashes/new.html.haml new file mode 100644 index 0000000..cb6162c --- /dev/null +++ b/rails/map-mash/app/views/mashes/new.html.haml @@ -0,0 +1,22 @@ +- content_for :head_js do + :javascript + $(function() { + $('.mash-image').click(function(elem) { + $('#mash_winner_id').val($(elem.target).attr('data-map-id')); + $('form[id^="edit_mash_"]').submit(); + }); + }); + +%h1 Mash the Maps! +%p Choose your fave. + +- form_for(@mash) do |f| + = f.error_messages + + #maps + #map_a.mash-image + %image{:src => "#{url_for @mash.map_a}.png", :'data-map-id' => @mash.map_a.id} + #map_b.mash-image + %image{:src => "#{url_for @mash.map_b}.png", :'data-map-id' => @mash.map_b.id} + + = f.hidden_field :winner_id, :value => '?' diff --git a/rails/map-mash/lib/mash_tournament_builder.rb b/rails/map-mash/lib/mash_tournament_builder.rb index a6415f0..0e0b47d 100644 --- a/rails/map-mash/lib/mash_tournament_builder.rb +++ b/rails/map-mash/lib/mash_tournament_builder.rb @@ -82,14 +82,14 @@ class MashTournamentBuilder previous_winners = previous.mashes.collect(&:winner_id) pool = @map_model.all( :order => 'RANDOM()', - :conditions => ['id in ?', previous_winners] + :conditions => {:id => previous_winners} ) filled_in = [] round.mashes.each do |mash| - mash.map_a = pool.pop.id - mash.map_b = pool.pop.id + mash.map_a = pool.pop + mash.map_b = pool.pop mash.save! filled_in << mash diff --git a/rails/map-mash/spec/views/mash_tournaments/show.html.erb_spec.rb b/rails/map-mash/spec/views/mash_tournaments/show.html.erb_spec.rb deleted file mode 100644 index 055a930..0000000 --- a/rails/map-mash/spec/views/mash_tournaments/show.html.erb_spec.rb +++ /dev/null @@ -1,12 +0,0 @@ -require 'spec_helper' - -describe "/mash_tournaments/show.html.erb" do - include MashTournamentsHelper - before(:each) do - assigns[:mash_tournament] = @mash_tournament = stub_model(MashTournament) - end - - it "renders attributes in

" do - render - end -end