summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortkimia <tkimia@purdue.edu>2014-04-26 16:57:26 -0400
committertkimia <tkimia@purdue.edu>2014-04-26 16:57:26 -0400
commit59d8a08232ae7872e2777ac42756fa259e1d1f6f (patch)
tree7a6f6819ca4d3226f33017c22de1e55a65e1fd6c
parentfedc51fb2d95d1e67c06e560448563a64fa458b1 (diff)
parent2aaaf29ae291edc34d0512ce9a812fc0de14f76b (diff)
Merge branch 'master' of https://github.com/LukeShu/leaguer
-rw-r--r--.gitignore8
-rw-r--r--Gemfile2
-rw-r--r--Gemfile.lock4
-rw-r--r--app/controllers/matches_controller.rb23
-rw-r--r--app/models/match.rb2
-rw-r--r--app/models/user.rb14
-rw-r--r--app/views/matches/show.html.erb34
-rw-r--r--config/application.example.yml3
-rw-r--r--config/initializers/secret_token.rb6
-rw-r--r--db/seeds.rb19
-rw-r--r--lib/scheduling/elimination.rb17
-rw-r--r--lib/scheduling/roundrobin.rb41
-rw-r--r--lib/scoring/ScoringAlgorithm.rb6
13 files changed, 140 insertions, 39 deletions
diff --git a/.gitignore b/.gitignore
index c9926d1..0859f70 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,7 +15,13 @@
/log/*.log
/tmp
-# The above is from Rails. The following is from Luke.
+# The above is from Rails.
+
+# The next lines are from `rails generate figaro:install`
+# Ignore application configuration
+/config/application.yml
+
+# The rest is from Luke.
/vendor/bundle
nohup.out
# As noted above, you probably want to add the following to your global git config.
diff --git a/Gemfile b/Gemfile
index 5a5be8b..5a6b98d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -52,6 +52,8 @@ gem 'delayed_job_active_record'
# Mailboxer supports a messaging and alerting system.
gem 'mailboxer'
+gem 'figaro'
+
group :doc do
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', require: false
diff --git a/Gemfile.lock b/Gemfile.lock
index 145a7fc..2de3fea 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -50,6 +50,9 @@ GEM
delayed_job (>= 3.0, < 4.1)
erubis (2.7.0)
execjs (2.0.2)
+ figaro (0.7.0)
+ bundler (~> 1.0)
+ rails (>= 3, < 5)
foreigner (1.6.1)
activerecord (>= 3.0.0)
hike (1.2.3)
@@ -143,6 +146,7 @@ DEPENDENCIES
coffee-rails (~> 4.0.0)
daemons
delayed_job_active_record
+ figaro
httparty
jbuilder (~> 1.2)
jquery-rails
diff --git a/app/controllers/matches_controller.rb b/app/controllers/matches_controller.rb
index 138cf28..b1b283b 100644
--- a/app/controllers/matches_controller.rb
+++ b/app/controllers/matches_controller.rb
@@ -55,7 +55,6 @@ class MatchesController < ApplicationController
@purp = purple
@blue = blue
-
end
def get_riot_info_fake
@@ -151,8 +150,7 @@ class MatchesController < ApplicationController
@purp = purple
@blue = blue
-
- end #end def
+ end
# GET /tournaments/1/matches/1
# GET /tournaments/1/matches/1.json
@@ -184,13 +182,18 @@ class MatchesController < ApplicationController
#make this use the statistics interface for scoring and ScoringAlgorithms
+ @match.winner = @match.teams.find_by_id(params['winner'])
+ @match.blowout = false
+ @match.statistics['Score'] = @tournament.settings['ScoringMethod'].constantize.score(@match, @match.statistics)
+
+=begin
# Individual scores
- scores = params["scores"]
- scores.each do |user_name, score|
- Statistic.create(user: User.find_by_user_name(user_name), match: @match, name: "score", value: score.to_i)
- end
+ #scores = params["scores"]
+ #scores.each do |user_name, score|
+ # Statistic.create(user: User.find_by_user_name(user_name), match: @match, name: "score", value: score.to_i)
+ #end
# Team scores (processing for manual)
team_scores = {}
@@ -208,6 +211,7 @@ class MatchesController < ApplicationController
#unless cur_match_num == 1
# @match.winner.matches.push(@tournament.matches_ordered[cur_match_num/2])
#end
+=end
# Skip peer evaluation if there aren't enough players per team
peer = false
@@ -218,12 +222,13 @@ class MatchesController < ApplicationController
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: "You don't have permission to start this match." }
+ format.html { redirect_to @tournament, notice: "Permission denied" }
format.json { render json: "Permission denied", status: :forbidden }
end
end
@@ -273,7 +278,6 @@ class MatchesController < ApplicationController
format.json { render json: @tournament.errors, status: :unprocessable_entity }
end
end
-
end
private
@@ -282,6 +286,7 @@ class MatchesController < ApplicationController
@match = Match.find(params[:id])
@tournament = @match.tournament_stage.tournament
end
+
def set_tournament
@tournament = Tournament.find(params[:tournament_id])
end
diff --git a/app/models/match.rb b/app/models/match.rb
index 20a36a5..9045d67 100644
--- a/app/models/match.rb
+++ b/app/models/match.rb
@@ -1,6 +1,6 @@
class Match < ActiveRecord::Base
belongs_to :tournament_stage
- has_many :scores
+ has_many :statistics
has_and_belongs_to_many :teams
belongs_to :winner, class_name: "Team"
diff --git a/app/models/user.rb b/app/models/user.rb
index e5ae7ea..d87f988 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -23,17 +23,23 @@ class User < ActiveRecord::Base
self.permissions ||= Server.first.default_user_permissions
end
- def scores
- self.statistics.find_by_name(:score)
+ def set_remote_username(game, data)
+ remote = self.remote_usernames.where(:game => game).first
+ if remote.nil?
+ self.remote_usernames.create(game: game, value: data)
+ else
+ remote.value = data
+ remote.save
+ end
end
- def find_remote_username(game)
+ def get_remote_username(game)
obj = self.remote_usernames.where(:game => game).first
if obj.nil?
if game.parent.nil?
return nil
else
- return find_remote_username(game.parent)
+ return get_remote_username(game.parent)
end
else
return obj.value
diff --git a/app/views/matches/show.html.erb b/app/views/matches/show.html.erb
index e1fe29e..7a82527 100644
--- a/app/views/matches/show.html.erb
+++ b/app/views/matches/show.html.erb
@@ -47,7 +47,8 @@ function score_peers() {
<% if @match.status <= 1 %>
<li><%= user.user_name %></li>
<% else %>
- <li><%= user.user_name %> - SCORE: <%= Statistic.where(:name => "score", :user => user, :match => @match).first.value %></li>
+ <% score = user.statistics.where(:name => "score", :match => @match).first %>
+ <li><%= user.user_name %> - SCORE: <%= score ? score.value : 0 %></li>
<% end %>
<% end %>
</ul></li>
@@ -76,21 +77,24 @@ function score_peers() {
<% when 1 %>
<!-- Started, waiting to finish -->
<!-- This will depend on the Sampling Method Eventually instead of always being Manual -->
- <% if @tournament.hosts.include? current_user %>
- <input type="hidden" name="update_action" value="finish">
- <% @match.teams.each do |team| %>
- <fieldset><legend>Team <%= team.id.to_s %></legend>
- <% team.users.collect{|u| u.user_name}.each do |k| %><label>
- Score for <%= k %><br>
- <% @player_score = 0 %>
- <% current_user.statistics.where(:match => @match, :user => current_user).each{ |s| @player_score+=s.value } %>
- <%= text_field_tag("scores[#{k}]", @player_score, size: 3) %>
- </label><% end %>
- </fieldset>
+
+ <% case @tournament.sampling_method %>
+ <% when "Manual" %>
+ <% if @tournament.hosts.include? current_user %>
+ <input type="hidden" name="update_action" value="finish">
+ <% @match.teams.each do |team| %>
+ <%= tag :input, {"type" => "radio", "name" => "winner", "value" => "#{team.id}" } %>
+ <%= "Team #{team.id} Won" %>
+ <% end %>
+ <%= submit_tag("Finish match") %>
+ <%= @tournament.settings['ScoringMethod'] %>
+ <% else %>
+ <p>The match is running; the host has yet to post the scores of the match.</p>
<% end %>
- <%= submit_tag("Finish match") %>
- <% else %>
- <p>The match is running; the host has yet to post the scores of the match.</p>
+ <% when "Double Blind" %>
+ <p>Double Blind isn't implemented yet.</p>
+ <% when "RiotAPI" %>
+ <p>Riot API is being called for Statistics. Results will appear shortly.</p>
<% end %>
<% when 2 %>
<!-- Finished, waiting for peer reviews -->
diff --git a/config/application.example.yml b/config/application.example.yml
new file mode 100644
index 0000000..a98b40e
--- /dev/null
+++ b/config/application.example.yml
@@ -0,0 +1,3 @@
+SECRET_TOKEN: 'cc884af613d0dd093f1d6c9153abac1200c5a0db923613245b80c5c3f5e9c9f9ba51712b702f2d494a22ddea8ab40601b38a41eb39eec97b50a7a2e37748b1bc'
+RIOT_API_KEY: 'ad539f86-22fd-474d-9279-79a7a296ac38'
+RIOT_API_REGION: 'na'
diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb
index 604d43d..fbab4b9 100644
--- a/config/initializers/secret_token.rb
+++ b/config/initializers/secret_token.rb
@@ -9,4 +9,8 @@
# Make sure your secret_key_base is kept private
# if you're sharing your code publicly.
-Leaguer::Application.config.secret_key_base = 'cc884af613d0dd093f1d6c9153abac1200c5a0db923613245b80c5c3f5e9c9f9ba51712b702f2d494a22ddea8ab40601b38a41eb39eec97b50a7a2e37748b1bc'
+Leaguer::Application.config.secret_key_base = if Rails.env.development? or Rails.env.test?
+ ('x' * 30) # meets minimum requirement of 30 chars long
+else
+ ENV['SECRET_TOKEN']
+end
diff --git a/db/seeds.rb b/db/seeds.rb
index 78c8ea0..7628efe 100644
--- a/db/seeds.rb
+++ b/db/seeds.rb
@@ -138,6 +138,25 @@ if Rails.env.development?
tourn6.join(guntas)
tourn6.join(luke)
tourn6.join(marco)
+=begin
+ hash1 = {:username => "TeslasMind", :id => id}
+ hash2 = {:username => "Alpha142", :id => id}
+ hash3 = {:username => "ImFromNasa", :id => id}
+ hash4 = {:username => "NalfeinX", :id => id}
+ hash5 = {:username => "GTBPhoenix", :id => id}
+ hash6 = {:username => , :id => id}
+ hash7 = {:username => username, :id => id}
+ hash8 = {:username => username, :id => id}
+ hash9 = {:username => username, :id => id}
+ hash10 = {:username => username, :id => id}
+
+FOR ROUNG ROBIN
+
+http://stackoverflow.com/questions/6648512/scheduling-algorithm-for-a-round-robin-tournament
+
+
+=end
+
end
diff --git a/lib/scheduling/elimination.rb b/lib/scheduling/elimination.rb
index eedeb52..15c33ed 100644
--- a/lib/scheduling/elimination.rb
+++ b/lib/scheduling/elimination.rb
@@ -7,14 +7,6 @@ module Scheduling
@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 = (Float(num_teams - tournament.min_teams_per_match)/(tournament.min_teams_per_match - 1)).ceil + 1
@@ -138,5 +130,14 @@ STRING
return str
end
+ private
+
+ def tournament_stage
+ @tournament_stage
+ end
+
+ def tournament
+ self.tournament_stage.tournament
+ end
end
end
diff --git a/lib/scheduling/roundrobin.rb b/lib/scheduling/roundrobin.rb
new file mode 100644
index 0000000..10af20e
--- /dev/null
+++ b/lib/scheduling/roundrobin.rb
@@ -0,0 +1,41 @@
+module Scheduling
+ class RoundRobin
+ include Rails.application.routes.url_helpers
+
+ def initialize(tournament_stage)
+ @tournament_stage = tournament_stage
+ end
+
+ def create_matches
+ num_teams = (self.tournament.players.count/self.tournament.min_players_per_team).floor
+ num_matches = Float(num_teams/2)*(num_teams-1)
+
+ #round robin should look like this
+ @team_pairs = Array.new(num_matches)
+ for i in 0..@match.teams.size
+ @team_pairs.push(@match.teams[i]
+ end
+ #team_pairs needs populated with the team objects and im not sure how to do that
+ end
+
+ #this is called when a round has completed
+ def rotate
+ hold = @team_pairs.shift
+ @team_pairs.rotate!
+ @team_pairs.unshift(hold)
+ # for j in 0..4
+ # puts "#{array[j]}, #{array[j+(array.size/2)-1]}"
+ # end
+ # puts "\n\n"
+
+ end
+
+ def match_finished(match)
+
+ end
+
+ def graph(current_user)
+
+ end
+ end
+end
diff --git a/lib/scoring/ScoringAlgorithm.rb b/lib/scoring/ScoringAlgorithm.rb
new file mode 100644
index 0000000..f2afa6f
--- /dev/null
+++ b/lib/scoring/ScoringAlgorithm.rb
@@ -0,0 +1,6 @@
+module Scoring
+ class ScoringAlgorithm
+ def self.score(match, interface)
+ end
+ end
+end