From c87dbe49d521683900c20a9425a96467fa631489 Mon Sep 17 00:00:00 2001 From: AndrewMurrell Date: Sun, 27 Apr 2014 20:39:13 -0400 Subject: Seeding Algorithms now create teams. --- lib/seeding/early_bird_seeding.rb | 2 +- lib/seeding/fair_ranked_seeding.rb | 3 +++ lib/seeding/random_seeding.rb | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/seeding/early_bird_seeding.rb b/lib/seeding/early_bird_seeding.rb index f3fc6f9..cb24415 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 22c245e..6531c43 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] diff --git a/lib/seeding/random_seeding.rb b/lib/seeding/random_seeding.rb index bc332ef..65979bc 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 -- cgit v1.2.3 From c52a612c3b713c6fbae0cbdc7a1f1cd5cd999c24 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sun, 27 Apr 2014 22:56:44 -0400 Subject: Re-jig the match life-cycle --- app/controllers/matches_controller.rb | 141 ++++++++++++---------------------- app/models/match.rb | 40 +++------- app/views/matches/show.html.erb | 79 +++++-------------- 3 files changed, 76 insertions(+), 184 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/models/match.rb b/app/models/match.rb index 9045d67..c2df6e0 100644 --- a/app/models/match.rb +++ b/app/models/match.rb @@ -5,41 +5,19 @@ class Match < ActiveRecord::Base belongs_to :winner, class_name: "Team" - def setup() - + def win?(player) + winner.players.include? player 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 handle_sampling(params) + # TODO end - #handle_asynchronously :is_match_over - def win?(player) - winner.players.include? player + 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..3f9c6b4 100644 --- a/app/views/matches/show.html.erb +++ b/app/views/matches/show.html.erb @@ -1,16 +1,3 @@ -

Status: @@ -22,11 +9,10 @@ function score_peers() {

<%# - 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,27 @@ function score_peers() { <%= form_tag(tournament_match_path(@tournament, @match), method: "put") do %> <% case @match.status %> <% when 0 %> - + +

This match has not yet been scheduled.

+ <% when 1 %> + <% if @tournament.hosts.include? current_user %> - <%= submit_tag("Start Match", :disabled => @match.teams.count < @tournament.min_teams_per_match) %> + <%= submit_tag("Start Match") %> <% else %>

Match is waiting to start.

<% end %> - <% when 1 %> - - - - <%= raw @match.tournament_stage.tournament.sampling_method.camelcase.constantize.render_user_interaction(@match, current_user) %> - <% when 2 %> - - - - <% 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) %> -
    - <% team.users.reject{ |u| (u.user_name == @current_user.user_name) }.collect {|u| u.user_name }.each do |k| %> -
  1. <%= k%> -
    - <% 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 %> -
  2. - <% end %> -
- <% end %> - <% end %> - <%= submit_tag("Submit peer evaluation", :onsubmit => "score_peers()") %> - <% else %> - Waiting for peer evaluations to be submitted. - <% end %> + + + <%= @match.render_sampling(current_user) %> <% when 3 %> - - This match is done. - - <%= submit_tag("Reset Status") %> - <% end # case %> - <% end # form %> + +

This match is finished.

+ <% if @tournament.hosts.include? current_user %> + + <%= submit_tag("Reset Status") %> + <% end %> + <% end %> + <% end %> -- cgit v1.2.3 From 2d7313767442956eab00671ac555c0ce4e583b5f Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sun, 27 Apr 2014 23:01:04 -0400 Subject: handle what I can of `fgrep -r TODO app lib` --- app/controllers/sessions_controller.rb | 2 +- app/controllers/tournaments_controller.rb | 8 -------- app/views/matches/show.html.erb | 1 - app/views/tournaments/show.html.erb | 3 +-- lib/sampling/riot_api.rb | 3 ++- 5 files changed, 4 insertions(+), 13 deletions(-) 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/views/matches/show.html.erb b/app/views/matches/show.html.erb index 3f9c6b4..01484d3 100644 --- a/app/views/matches/show.html.erb +++ b/app/views/matches/show.html.erb @@ -64,7 +64,6 @@ <% end %> <% when 2 %> - <%= @match.render_sampling(current_user) %> <% when 3 %> 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 @@

Sampling method: - - <%= @tournament.sampling_method %> + <%= @tournament.sampling_method.humanize.capitalize %>

<% @tournament.settings.each do |setting| %> 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? -- cgit v1.2.3 From 17169088974477c2702377a5ea3e14afff62e009 Mon Sep 17 00:00:00 2001 From: nfoy Date: Sun, 27 Apr 2014 23:05:26 -0400 Subject: Fixed conversations. --- app/views/pms/index.html.erb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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 @@ - <% 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? %> With @@ -38,9 +38,9 @@ <% end %> <% end %> - <% else %> -

No unread conversations

- <% end %> + <%# else %> + + <%# end %> @@ -53,7 +53,7 @@ - <% 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? %> With @@ -80,8 +80,8 @@ <% end %> <% end %> - <% else %> -

No unread conversations

- <% end %> + <% #else %> + + <% #end %> \ No newline at end of file -- cgit v1.2.3 From b35fa4b6f79d13d46eab4c9ba9e631eeb20ba73b Mon Sep 17 00:00:00 2001 From: AndrewMurrell Date: Sun, 27 Apr 2014 23:15:31 -0400 Subject: replaced getStatistic with focused where --- app/models/match.rb | 9 ++++++++- app/views/tournaments/standings.html.erb | 4 ++-- lib/seeding/fair_ranked_seeding.rb | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/models/match.rb b/app/models/match.rb index 9045d67..e817b71 100644 --- a/app/models/match.rb +++ b/app/models/match.rb @@ -6,7 +6,14 @@ class Match < ActiveRecord::Base belongs_to :winner, class_name: "Team" def setup() - + end + + def finished? + ok = true + tournament_stage.scoring_method.stats_needed.each do |stat| + ok &= statistics.where(match: self, name: stat).nil? + end + ok end def is_match_over(match, firstPlayer) 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 } } } %> diff --git a/lib/seeding/fair_ranked_seeding.rb b/lib/seeding/fair_ranked_seeding.rb index 6bc62ca..870ebdd 100644 --- a/lib/seeding/fair_ranked_seeding.rb +++ b/lib/seeding/fair_ranked_seeding.rb @@ -33,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 -- cgit v1.2.3