summaryrefslogtreecommitdiff
path: root/lib/sampling/peer_review.rb
diff options
context:
space:
mode:
authorLuke Shumaker <shumakl@purdue.edu>2014-04-27 21:28:10 -0400
committerLuke Shumaker <shumakl@purdue.edu>2014-04-27 21:28:10 -0400
commit83aa6970f730005d8322402ee316e2731fd42506 (patch)
tree0f5a0b42a0bf79794b923dfefa66d1c9608ac18d /lib/sampling/peer_review.rb
parent69aef895674c8de650501a9effb0046ba41f9529 (diff)
add lib/sampling/peer_review.*
Diffstat (limited to 'lib/sampling/peer_review.rb')
-rw-r--r--lib/sampling/peer_review.rb85
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/sampling/peer_review.rb b/lib/sampling/peer_review.rb
new file mode 100644
index 0000000..9f1833d
--- /dev/null
+++ b/lib/sampling/peer_review.rb
@@ -0,0 +1,85 @@
+module Sampling
+ module PeerReview
+ def self.works_with?(game)
+ return true
+ end
+
+ def self.uses_remote?
+ return false
+ end
+
+ def self.set_remote_name(user, game, value)
+ raise "This sampling method doesn't use remote usernames."
+ end
+
+ def self.get_remote_name(value)
+ raise "This sampling method doesn't use remote usernames."
+ end
+
+ def self.sampling_start(match)
+ # 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)
+ @feedbacks_missing = get_feedbacks_missing(match)
+
+ 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, reviewing_user, params)
+ i = 0
+ params[:peer_review].to_s.split(',').each do |user_name|
+ reviewed_user = User.find_by_user_name(user_name)
+ user.statistics.create(match: match, value: i)
+ i += 1
+ end
+ end
+
+ private
+
+ def self.get_users(match)
+ users = []
+ match.teams.each{|t| users.concat(t.users)}
+ return users
+ end
+
+ def self.get_team(match)
+ match.teams.find{|t|t.users.include?(@user)}
+ end
+
+ def self.get_feedbacks(match)
+ ret = {}
+ match.statistiscs.where("'name' LIKE 'feedback_from_%'").each do |statistic|
+ ret[statistic.user] ||= {}
+ ret[statistic.user][User.find_by_user_name(statistic.name.sub(/^feedback_from_/,''))] = statistic.value
+ end
+ return ret
+ end
+
+ def self.get_feedbacks_missing(match)
+ require 'set'
+ ret = Set.new()
+
+ feedback = get_feedbacks(match)
+ users = get_users(match)
+
+ feedback.each do |feedback|
+ (users - feedback.keys).each do |user|
+ ret.push(user)
+ end
+ end
+
+ return ret
+ endx
+ end
+end