summaryrefslogtreecommitdiff
path: root/lib/scheduling/elimination.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/scheduling/elimination.rb')
-rw-r--r--lib/scheduling/elimination.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/scheduling/elimination.rb b/lib/scheduling/elimination.rb
new file mode 100644
index 0000000..519d08a
--- /dev/null
+++ b/lib/scheduling/elimination.rb
@@ -0,0 +1,55 @@
+module Scheduling
+ class Elimination
+
+ def initialize(tournament_stage)
+ @tournament_stage = tournament_stage
+ end
+
+ def tournament_stage
+ @tournament_stage
+ end
+ def tournament
+ self.tournament_stage.tournament
+ end
+
+ def create_matches
+ num_teams = (self.tournament.players.count/self.tournament.min_players_per_team).floor
+ num_matches = num_teams - 1
+ for i in 1..num_matches
+ self.tournament_stage.matches.create(status: 0, submitted_peer_evaluations: 0)
+ end
+ match_num = num_matches-1
+ team_num = 0
+ # for each grouping of min_players_per_team
+ self.tournament.players.each_slice(min_players_per_team) do |team_members|
+ # if the match is full, move to the next match, otherwise move to the next team
+ if (team_num == min_teams_per_match)
+ match_num -= 1
+ team_num = 0
+ else
+ team_num += 1
+ end
+ # create a new team in the current match
+ self.tournament_stage.matches[match_num].teams.push(Team.create(users: team_members))
+ end
+ end
+
+ def match_finished(match)
+ matches = match.tournament_stage.matches_ordered
+ cur_match_num = matches.invert[match]
+ unless cur_match_num == 1
+ match.winner.matches.push(matches[cur_match_num/2])
+ end
+ end
+
+ def graph
+ require 'erb'
+ erb_filename = File.join(File.dirname(__FILE__), 'elimination.svg.erb')
+
+ erb = ERB.new(File.read(erb_filename))
+ erb.filename = erb_filename
+ return erb.result
+ end
+
+ end
+end