summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/matches_controller.rb141
-rw-r--r--app/controllers/sessions_controller.rb2
-rw-r--r--app/controllers/tournaments_controller.rb8
-rw-r--r--app/models/match.rb44
-rw-r--r--app/views/matches/show.html.erb78
-rw-r--r--app/views/pms/index.html.erb16
-rw-r--r--app/views/tournaments/show.html.erb3
-rw-r--r--app/views/tournaments/standings.html.erb4
-rw-r--r--lib/sampling/riot_api.rb3
-rw-r--r--lib/seeding/early_bird_seeding.rb2
-rw-r--r--lib/seeding/fair_ranked_seeding.rb5
-rw-r--r--lib/seeding/random_seeding.rb2
12 files changed, 102 insertions, 206 deletions
diff --git a/app/controllers/matches_controller.rb b/app/controllers/matches_controller.rb
index 4c92e67..bed06ba 100644
--- a/app/controllers/matches_controller.rb
+++ b/app/controllers/matches_controller.rb
@@ -24,108 +24,61 @@ class MatchesController < ApplicationController
# PATCH/PUT /tournaments/1/matches/1
# PATCH/PUT /tournaments/1/matches/1.json
def update
- case params[:update_action]
- when "start"
- #
- # Redirect to the current match page for this tournament with the correct sampling view rendered
- #
-
- @match.status = 1
- respond_to do |format|
- if @match.save
- format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Match has started.' }
- format.json { head :no_content }
- else
- format.html { redirect_to @tournament, notice: "You don't have permission to start this match." }
- format.json { render json: "Permission denied", status: :forbidden }
- end
- end
- when "finish"
- #
- # Get the winner and blowout status from the params given by the correct sampling view
- #
-
- unless @match.tournament_stage.tournament.sampling.sampling_done?
- @match.tournament_stage.tournament.sampling.handle_user_interaction(@match, current_user, params)
- end
-
- # Skip peer evaluation if there aren't enough players per team
- peer = false
- @match.teams.each do |team|
- if team.users.count > 2
- peer = true
+ case @match.status
+ when 0
+ # Created, waiting to be scheduled
+ when 1
+ # Scheduled, waiting to start
+ if (@tournament.hosts.include? current_user) and (params[:update_action] == "start")
+ @match.status = 2
+ respond_to do |format|
+ if @match.save
+ format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Match has started.' }
+ format.json { head :no_content }
+ else
+ format.html { render action: 'show' }
+ format.json { render json: @match.errors, status: :unprocessable_entity }
+ end
end
+ return
end
- @match.status = peer ? 2 : 3
-
- respond_to do |format|
- if @match.save
- format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Peer evaluation started.' }
- format.json { head :no_content }
- else
- format.html { redirect_to @tournament, notice: "Permission denied" }
- format.json { render json: "Permission denied", status: :forbidden }
- end
- end
- when "peer"
- #
- # Update user scores via scoring method
- #
-
- #update this to use scoring interface
-
- order = params[:review_action]
- base_score = 2
- next_score = 3
- order.split(",").reverse.each do |elem|
- player_score = base_score
- if @match.winner.user.include?(@current_user)
- player_score += 10
- else
- player_score += 7
- end
- Score.create(user: elem, match: @match, value: player_score )
- base_score = next_score
- next_score += base_score
- end
-
- @match.submitted_peer_evaluations += 1
- players = []; @match.teams.each{|t| players.concat(t.users.all)}
- if (@match.submitted_peer_evaluations == players.count)
+ when 2
+ # Started, waiting to finish
+ @match.handle_sampling(params)
+ if @match.finished?
@match.status = 3
- end
-
-
- respond_to do |format|
- if @match.save
- format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Scores Submitted' }
- format.json { head :no_content }
- else
- format.html { redirect_to @tournament, notice: "You don't have permission to start this match." }
- format.json { render json: "Permission denied", status: :forbidden }
+ respond_to do |format|
+ if @match.save
+ format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Match has finished.' }
+ format.json { head :no_content }
+ else
+ format.html { render action: 'show' }
+ format.json { render json: @match.errors, status: :unprocessable_entity }
+ end
end
+ return
end
- when "reset"
- #
- # Reset Match Status to 1 in case something needs to be replayed.
- #
-
- @match.status = 1
- respond_to do |format|
- if @match.save
- format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Match Status Reset to 1' }
- format.json { head :no_content }
- else
- format.html { redirect_to @tournament, notice: "You don't have permission to start this match." }
- format.json { render json: "Permission denied", status: :forbidden }
+ when 3
+ if (@tournament.hosts.include? current_user) and (params[:update_action] == "start")
+ ok = true
+ ActiveRecord::Base.transaction do
+ ok &= @match.statitistics.destroy_all
+ @match.status = 1
+ ok &= @match.save
end
- end
- else
- respond_to do |format|
- format.html { redirect_to @tournament, notice: "Invalid action", status: :unprocessable_entity }
- format.json { render json: @tournament.errors, status: :unprocessable_entity }
+ respond_to do |format|
+ if @match.save
+ format.html { redirect_to tournament_match_path(@tournament, @match), notice: 'Match has finished.' }
+ format.json { head :no_content }
+ else
+ format.html { render action: 'show' }
+ format.json { render json: @match.errors, status: :unprocessable_entity }
+ end
+ end
+ return
end
end
+ redirect_to tournament_match_path(@tournament, @match)
end
private
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index a0390ad..9f0a8e3 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -18,7 +18,7 @@ class SessionsController < ApplicationController
if @user && @user.authenticate(params[:session][:password])
sign_in @user
format.html { redirect_to root_path }
- #format.json { #TODO }
+ #format.json { # TODO }
else
format.html { render action: 'new' }
format.json { render json: @user.errors, status: :unprocessable_entity }
diff --git a/app/controllers/tournaments_controller.rb b/app/controllers/tournaments_controller.rb
index 2e854a2..c06c16c 100644
--- a/app/controllers/tournaments_controller.rb
+++ b/app/controllers/tournaments_controller.rb
@@ -87,14 +87,6 @@ class TournamentsController < ApplicationController
end
end
- def create_stage
-
- # stage = @tournament.stages.new
- # stage.create(TODO:PARAMETERS)
- # @tournament.stages.push(stage)
-
- end
-
# PATCH/PUT /tournaments/1
# PATCH/PUT /tournaments/1.json
def update
diff --git a/app/models/match.rb b/app/models/match.rb
index 9045d67..d4c0ce5 100644
--- a/app/models/match.rb
+++ b/app/models/match.rb
@@ -6,40 +6,28 @@ class Match < ActiveRecord::Base
belongs_to :winner, class_name: "Team"
def setup()
-
end
- def is_match_over(match, firstPlayer)
- #response = HTTParty.get("https://prod.api.pvp.net/api/lol/na/v1.3/summoner/by-name/#{firstPlayer}?api_key=ad539f86-22fd-474d-9279-79a7a296ac38")
- #riot_id = response["#{firstPlayer}"]['id']
- #recent game information
- #game_info = HTTParty.get("https://prod.api.pvp.net/api/lol/na/v1.3/game/by-summoner/#{riot_id}/recent?api_key=ad539f86-22fd-474d-9279-79a7a296ac38")
- #first_id = game_info["games"][0]["gameId"]
-
- count = 0
- while true do
- #sleep(5) #wait four minutes
-
- puts("Every 4 minutes.")
- puts("Every 4 minutes.")
- count += 1
- #game_info = HTTParty.get("https://prod.api.pvp.net/api/lol/na/v1.3/game/by-summoner/#{riot_id}/recent?api_key=ad539f86-22fd-474d-9279-79a7a296ac38")
- #current_id = game_info["games"][0]["gameId"]
-
- #if current_id != first_id
- if count > 2
- puts(count)
- #sleep(10)
- match.status = 2
- match.save
- return true
- end
- end #while
+ def finished?
+ ok = true
+ tournament_stage.scoring_method.stats_needed.each do |stat|
+ ok &= statistics.where(match: self, name: stat).nil?
+ ok
end
- #handle_asynchronously :is_match_over
def win?(player)
winner.players.include? player
end
+ def handle_sampling(params)
+ # TODO
+ end
+
+ def render_sampling(user)
+ # TODO
+ end
+
+ def finished?
+ # TODO
+ end
end
diff --git a/app/views/matches/show.html.erb b/app/views/matches/show.html.erb
index 1c11eb7..01484d3 100644
--- a/app/views/matches/show.html.erb
+++ b/app/views/matches/show.html.erb
@@ -1,16 +1,3 @@
-<script type="text/javascript">
-function score_peers() {
- //get each player in order and assign score here!
- var $lisp = $('ol#boxes');
- var comma = ","
- for(var i=0; i < $lisp.length; i++) {
- if ( i == lisp.length-1) {
- comma = "";
- }
- $('review_action').value += $('ol#boxes:eq(' + i + ')').text() + comma;
- }
-}
-</script>
<p>
<strong>Status:</strong>
@@ -22,11 +9,10 @@ function score_peers() {
</p>
<%#
- Match Status 0 => Created, waiting to start
- Match Status 1 => Match ready
- Match Status 2 => Match is running, waiting to finish
- Match Status 3 => Match finished, waiting for statistics to populate
- Match Status 4 => Match Totally done. Archived.
+ Match Status 0 => Created, waiting to be scheduled
+ Match Status 1 => Scheduled, waiting to start
+ Match Status 2 => Started, waiting to finish
+ Match Status 3 => Finished
Four views:- (status is Match status)
A. Pairings, when status is 1 for either Host or Player Or when status is 2 for player
@@ -66,52 +52,26 @@ function score_peers() {
<%= form_tag(tournament_match_path(@tournament, @match), method: "put") do %>
<% case @match.status %>
<% when 0 %>
- <!-- Created, waiting to start -->
+ <!-- Created, waiting to be scheduled -->
+ <p>This match has not yet been scheduled.</p>
+ <% when 1 %>
+ <!-- Scheduled, waiting to start -->
<% if @tournament.hosts.include? current_user %>
<input type="hidden" name="update_action" value="start">
- <%= submit_tag("Start Match", :disabled => @match.teams.count < @tournament.min_teams_per_match) %>
+ <%= submit_tag("Start Match") %>
<% else %>
<p>Match is waiting to start.</p>
<% end %>
- <% when 1 %>
- <!-- Started, waiting to finish -->
- <!-- This will depend on the Sampling Method Eventually instead of always being Manual -->
-
- <%= raw @match.tournament_stage.tournament.sampling_method.camelcase.constantize.render_user_interaction(@match, current_user) %>
-
<% when 2 %>
- <!-- Finished, waiting for peer reviews -->
- <input type="hidden" name="update_action" value="peer">
- <input type="hidden" name="review_action" value="">
- <% users = []; @match.teams.each{|t| users.concat(t.users)}; %>
- <% if users.include? current_user %>
- <% @match.teams.each do |team| %>
- <% if team.users.include?(current_user) %>
- <ol id="boxes" class="sortable">
- <% team.users.reject{ |u| (u.user_name == @current_user.user_name) }.collect {|u| u.user_name }.each do |k| %>
- <li><%= k%>
- <br>
- <% if (@tournament.game_id == 1) %>
- <%= if @blue2["#{k}"] == nil
- "Level: #{@purp2["#{k}"]["level"]} K/D/A: #{@purp2["#{k}"]["championsKilled"]}/#{@purp2["#{k}"]["numDeaths"]}/#{@purp2["#{k}"]["assists"]} Gold:#{@purp2["#{k}"]["goldEarned"]}"
- else
- "Level: #{@blue2["#{k}"]["level"]} K/D/A: #{@blue2["#{k}"]["championsKilled"]}/#{@blue2["#{k}"]["numDeaths"]}/#{@blue2["#{k}"]["assists"]} Gold:#{@blue2["#{k}"]["goldEarned"]}"
- end %>
- <% end %>
- </li>
- <% end %>
- </ol>
- <% end %>
- <% end %>
- <%= submit_tag("Submit peer evaluation", :onsubmit => "score_peers()") %>
- <% else %>
- Waiting for peer evaluations to be submitted.
- <% end %>
+ <!-- Started, waiting to finish -->
+ <%= @match.render_sampling(current_user) %>
<% when 3 %>
- <!-- Totally done -->
- This match is done.
- <input type="hidden" name="update_action" value="reset">
- <%= submit_tag("Reset Status") %>
- <% end # case %>
- <% end # form %>
+ <!-- Finished -->
+ <p>This match is finished.</p>
+ <% if @tournament.hosts.include? current_user %>
+ <input type="hidden" name="update_action" value="reset">
+ <%= submit_tag("Reset Status") %>
+ <% end %>
+ <% end %>
+ <% end %>
</div>
diff --git a/app/views/pms/index.html.erb b/app/views/pms/index.html.erb
index a1feb42..056b371 100644
--- a/app/views/pms/index.html.erb
+++ b/app/views/pms/index.html.erb
@@ -11,7 +11,7 @@
<col width="250">
<col width="300">
<tbody>
- <% if conversations.reject { |c| c.is_unread?(current_user) && (c.receipts_for current_user).last.message.sender != current_user }.empty? %>
+ <%# if conversations.reject { |c| c.is_unread?(current_user) && (c.receipts_for current_user).last.message.sender != current_user }.empty? %>
<tr>
<tr>
<td><b>With</b></td>
@@ -38,9 +38,9 @@
<% end %>
<% end %>
</tr>
- <% else %>
- <h4> No unread conversations </h4>
- <% end %>
+ <%# else %>
+
+ <%# end %>
</tbody>
</table>
@@ -53,7 +53,7 @@
<col width="250">
<col width="300">
<tbody>
- <% if conversations.reject { |c| c.is_read?(current_user) || (c.receipts_for current_user).last.message.sender == current_user }.empty? %>
+ <%# if conversations.reject { |c| c.is_read?(current_user) || (c.receipts_for current_user).last.message.sender == current_user }.empty? %>
<tr>
<tr>
<td><b>With</b></td>
@@ -80,8 +80,8 @@
<% end %>
<% end %>
</tr>
- <% else %>
- <h4> No unread conversations </h4>
- <% end %>
+ <% #else %>
+
+ <% #end %>
</tbody>
</table> \ No newline at end of file
diff --git a/app/views/tournaments/show.html.erb b/app/views/tournaments/show.html.erb
index 53389bb..c71d3c6 100644
--- a/app/views/tournaments/show.html.erb
+++ b/app/views/tournaments/show.html.erb
@@ -47,8 +47,7 @@
<p>
<strong>Sampling method:</strong>
- <!-- TODO -->
- <%= @tournament.sampling_method %>
+ <%= @tournament.sampling_method.humanize.capitalize %>
</p>
<% @tournament.settings.each do |setting| %>
diff --git a/app/views/tournaments/standings.html.erb b/app/views/tournaments/standings.html.erb
index b8739de..a04e132 100644
--- a/app/views/tournaments/standings.html.erb
+++ b/app/views/tournaments/standings.html.erb
@@ -1,7 +1,7 @@
-<% playerscores = @tournament.players.collect {|player| player => @tournament.statistics.getStatistic(player.matches.last, player, :score) } %>
+<% playerscores = @tournament.players.collect {|player| player => @tournament.statistics.where(match: player.matches.last, user: player, name: :score) } %>
<% teams = tournament_stage.matches.collect
{ |match| match.teams.collect { |team| team.id => team.players.collect
-{ |player| player.user_name => @tournament.statistics.getStatistic(player.matches.last, player, :score } } } %>
+{ |player| player.user_name => @tournament.statistics.where(match: player.matches.last, user: player, name: :score } } } %>
<table>
<tr>
diff --git a/lib/sampling/riot_api.rb b/lib/sampling/riot_api.rb
index 333095c..8c34fc4 100644
--- a/lib/sampling/riot_api.rb
+++ b/lib/sampling/riot_api.rb
@@ -84,7 +84,8 @@ module Sampling
end
##
- # TODO description
+ # Return whether or not the API can get a given statistic for
+ # a given user.
public
def self.can_get?(user, stat)
if user.nil?
diff --git a/lib/seeding/early_bird_seeding.rb b/lib/seeding/early_bird_seeding.rb
index 488a1a2..5c289ed 100644
--- a/lib/seeding/early_bird_seeding.rb
+++ b/lib/seeding/early_bird_seeding.rb
@@ -7,7 +7,7 @@ module Seeding
teams = 0
tournament.players.each_slice(tournament.min_players_per_team) do |slice|
if teams < tournament.min_teams_per_match
- match.teams[teams].players += slice
+ match.teams.push Team.create(players: slice)
teams += 1
else
match_num += 1
diff --git a/lib/seeding/fair_ranked_seeding.rb b/lib/seeding/fair_ranked_seeding.rb
index f56d648..870ebdd 100644
--- a/lib/seeding/fair_ranked_seeding.rb
+++ b/lib/seeding/fair_ranked_seeding.rb
@@ -5,6 +5,9 @@ module Seeding
match = matches.first
match_num = 0
players_used = 0
+ (tournament.players.count/tournament.min_players_per_team).floor.times do
+ match.teams.push Team.create()
+ end
best_first(tournament).each_slice(tournament.min_teams_per_match) do |slice|
(0..tournament.min_teams_per_match-1).each do |index|
match.teams[index].players += slice[index]
@@ -30,7 +33,7 @@ module Seeding
end
def self.previous_score(player, tournament)
- score = tournament.statistics.getStatistic(player.matches.last, player, :score)
+ score = tournament.statistics.where(match: player.matches.last, user: player, name: :score)
if score.nil?
return 0
end
diff --git a/lib/seeding/random_seeding.rb b/lib/seeding/random_seeding.rb
index 723d70e..36e06d6 100644
--- a/lib/seeding/random_seeding.rb
+++ b/lib/seeding/random_seeding.rb
@@ -7,7 +7,7 @@ module Seeding
teams = 0
tournament.players.shuffle.each_slice(tournament.min_players_per_team) do |slice|
if teams < tournament.min_teams_per_match
- match.teams[teams].players += slice
+ match.teams.push Team.create(players: slice)
teams += 1
else
match_num += 1