summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndrewMurrell <amurrel@purdue.edu>2014-04-27 22:25:47 -0400
committerAndrewMurrell <amurrel@purdue.edu>2014-04-27 22:25:47 -0400
commitd4e4e9281ac707130281eff3beb4bd100dd07809 (patch)
tree3a91c85026956213b49e5303aa3cf8fa0fe23330 /lib
parent8dcf94aa47869a61a7b03e3117187dee2ffb34f9 (diff)
parente46b38a457cf9cc685f644be741073df183f53b2 (diff)
Merge branch 'master' of http://github.com/LukeShu/leaguer
Diffstat (limited to 'lib')
-rw-r--r--lib/sampling/README.md13
-rw-r--r--lib/sampling/double_blind.rb.bak (renamed from lib/sampling/double_blind.rb)10
-rw-r--r--lib/sampling/manual.rb18
-rw-r--r--lib/sampling/peer_review.rb4
-rw-r--r--lib/sampling/riot_api.rb61
5 files changed, 70 insertions, 36 deletions
diff --git a/lib/sampling/README.md b/lib/sampling/README.md
index 731f1d1..bde84cd 100644
--- a/lib/sampling/README.md
+++ b/lib/sampling/README.md
@@ -9,6 +9,12 @@ interface:
Returns whether or not this sampling method works with the
specified game.
+ - `can_get?(User, String setting_name) => Fixnum`
+
+ Returns whether or nat this sampling method can get a specifed
+ statistic; 0 means 'false', positive integers mean 'true', where
+ higher numbers are higher priority.
+
- `uses_remote?() => Boolean`
Return whether or not this sampling method requires remote IDs for
@@ -22,15 +28,10 @@ interface:
When given an object from `RemoteUsername#value`, give back a
human-readable/editable name to display.
- - `sampling_start(Match)`
+ - `sampling_start(Match, Array[]={:user=>User,:stat=>String})`
Fetch the statistics for a match.
- - `sampling_done?(Match) => Boolean`
-
- Returns whether or not statistics have been completely collected
- yet.
-
- `render_user_interaction(Match, User) => String`
Returns HTML to render on a page.
diff --git a/lib/sampling/double_blind.rb b/lib/sampling/double_blind.rb.bak
index 409da10..6a30d57 100644
--- a/lib/sampling/double_blind.rb
+++ b/lib/sampling/double_blind.rb.bak
@@ -4,6 +4,10 @@ module Sampling
return true
end
+ def can_get?(setting_name)
+ return 1
+ end
+
def self.uses_remote?
return false
end
@@ -16,11 +20,7 @@ module Sampling
raise "This sampling method doesn't use remote usernames."
end
- def self.sampling_start(match)
- # TODO
- end
-
- def self.sampling_done?(match)
+ def self.sampling_start(match, statistics)
# TODO
end
diff --git a/lib/sampling/manual.rb b/lib/sampling/manual.rb
index a1bf9a5..b5c97c4 100644
--- a/lib/sampling/manual.rb
+++ b/lib/sampling/manual.rb
@@ -4,6 +4,10 @@ module Sampling
return true
end
+ def can_get?(user, setting_name)
+ return 1
+ end
+
def self.uses_remote?
return false
end
@@ -16,16 +20,18 @@ module Sampling
raise "This sampling method doesn't use remote usernames."
end
- def self.sampling_start(match)
- # TODO
- end
-
- def self.sampling_done?(match)
- # TODO
+ def self.sampling_start(match, statistics)
+ # do nothing
end
def self.render_user_interaction(match, user)
# TODO
+
+ require 'erb'
+ erb_filename = File.join(__FILE__.sub(/\.rb$/, '.svg.erb'))
+ erb = ERB.new(File.read(erb_filename))
+ erb.filename = erb_filename
+ return erb.result.html_safe
end
def self.handle_user_interaction(match, user, sampling_params)
diff --git a/lib/sampling/peer_review.rb b/lib/sampling/peer_review.rb
index 9f1833d..cbbd2f9 100644
--- a/lib/sampling/peer_review.rb
+++ b/lib/sampling/peer_review.rb
@@ -20,10 +20,6 @@ module Sampling
# do nothing
end
- def self.sampling_done?(match)
- return get_feedbacks_missing(match).empty?
- end
-
def self.render_user_interaction(match, user)
@user = user
@team = get_team(match)
diff --git a/lib/sampling/riot_api.rb b/lib/sampling/riot_api.rb
index d5e9c72..333095c 100644
--- a/lib/sampling/riot_api.rb
+++ b/lib/sampling/riot_api.rb
@@ -31,6 +31,11 @@ module Sampling
end
protected
+ def self.stats_available
+ ["win", "numDeaths", "turretsKilled", "championsKilled", "minionsKilled", "assists"]
+ end
+
+ protected
class Job < ThrottledApiRequest
def initialize(request, args={})
@url = Sampling::RiotApi::url(request, args)
@@ -79,6 +84,26 @@ module Sampling
end
##
+ # TODO description
+ public
+ def self.can_get?(user, stat)
+ if user.nil?
+ return 0
+ end
+ summoner = user.get_remote_username(match.tournament_stage.tournament.game)
+ if summoner.nil?
+ return 0
+ end
+ if summoner["id"].nil?
+ return 0
+ end
+ unless stats_available.include?(stat)
+ return 0
+ end
+ return 2
+ end
+
+ ##
# This sampling method uses remote IDs
public
def self.uses_remote?
@@ -105,10 +130,10 @@ module Sampling
user = User.find(@user_id)
game = Game.find(@game_id)
- normalized_summoner_name = data.keys.first
+ standardized_summoner_name = data.keys.first
remote_data = {
- :id => data[normalized_summoner_name]["id"],
- :name => data[normalized_summoner_name]["name"],
+ :id => data[standardized_summoner_name]["id"],
+ :name => data[standardized_summoner_name]["name"],
}
user.set_remote_username(game, remote_data)
@@ -126,39 +151,45 @@ module Sampling
##
# Fetch all the statistics for a match.
public
- def self.sampling_start(match)
+ def self.sampling_start(match, stats)
@match.teams.each do |team|
team.users.each do |user|
- Delayed::Job.enqueue(MatchJob.new(user, match), :queue => api_name)
+ Delayed::Job.enqueue(MatchJob.new(user, match, stats.map{|stat|stat[:name]}, nil), :queue => api_name)
end
end
end
protected
class FetchStatisticsJob < Job
- def initialize(user, match)
+ def initialize(user, match, stats, last_game_id)
@user_id = user.id
@match_id = match.id
+ @stats = stats
+ @last_game_id = last_game_id
+
# Get the summoner id
summoner = user.get_remote_username(match.tournament_stage.tournament.game)
- if summoner.nil?
- raise "Someone didn't enter their summoner name"
- end
# Generate the request
super("v1.3/game/by-summoner/%{summonerId}/recent", { :summonerId => summoner["id"] })
end
def handle(data)
user = User.find(@user_id)
match = Match.find(@match_id)
- Statistic.create(user: user, match: match, value: TODO)
+ if @last_game_id.nil?
+ Delayed::Job.enqueue(MatchJob.new(user, match, data["games"][0]["gameId"]), :queue => api_name)
+ else
+ if @last_game_id == data["games"][0]["gameId"]
+ # TODO: perhaps insert a delay here?
+ Delayed::Job.enqueue(MatchJob.new(user, match, @last_game_id), :queue => api_name)
+ else
+ @stats.each do |stat|
+ Statistic.create(user: user, match: match, name: stat, value: data["games"][0]["stats"][stat])
+ end
+ end
+ end
end
end
public
- def self.sampling_done?(match)
- # TODO
- end
-
- public
def self.render_user_interaction(match, user)
return ""
end