-
Notifications
You must be signed in to change notification settings - Fork 12
/
match_controller.rb
50 lines (39 loc) · 1.48 KB
/
match_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class MatchController < ApplicationController
before_filter :authorize
def index; end
def show; end
def new; end
def update_view; Rails.logger.silence{ render :action => 'update_view' } ; end
def viewmodel; Rails.logger.silence{ render :action => 'viewmodel' } ; end
# json for autocomplete
def players
render :json => Player.find(:all, :conditions => "name like '#{ params[:term] }%'" ).map(&:name)
end
# TODO can consolidate these match actions into one method for nice LOC savings - delegate actions to model
def resign
match.resign( request.player )
match.save!
redirect_to :action => 'index'
end
def offer_draw
match.draw_offerer = request.player
match.save!
end
def decline_draw
match.update_attribute(:draw_offerer, nil)
end
def accept_draw
return unless match.side_of( request.player ) && match.draw_offerer != request.player
match.result, match.active = ['Draw by Agreement', 0]
match.save!
end
def create( switch_em = params[:opponent_side] =='white' )
players = [ request.player, Player.find_by_name(params[:opponent_name]) ]
@match = Match.start!( :players => players.send(switch_em ? :reverse : :to_a),
:start_pos => params[:start_pos] )
ChessNotifier.deliver_match_created(request.opponent(@match), request.player, @match)
redirect_to match_url(@match.id)
end
# TODO make match a thread-local global variable
def match; request.match; end; private :match
end