summaryrefslogtreecommitdiff
path: root/lib/scheduling/elimination.rb
blob: 519d08a57117396ef408a535d3096c077bb9d758 (plain)
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
51
52
53
54
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