From 83aa6970f730005d8322402ee316e2731fd42506 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sun, 27 Apr 2014 21:28:10 -0400 Subject: add lib/sampling/peer_review.* --- lib/sampling/peer_review.html.erb | 28 +++++++++++++ lib/sampling/peer_review.rb | 85 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 lib/sampling/peer_review.html.erb create mode 100644 lib/sampling/peer_review.rb (limited to 'lib') diff --git a/lib/sampling/peer_review.html.erb b/lib/sampling/peer_review.html.erb new file mode 100644 index 0000000..8ff350e --- /dev/null +++ b/lib/sampling/peer_review.html.erb @@ -0,0 +1,28 @@ +<% if @feedbacks_missing.include? @user %> + + +
    + <% @team.users.reject{|u|u==@user}.each do |user| %>
  1. + <%= user.user_name %> +
    + <%# TODO: display more statistics %> +
  2. <% end %> +
+ <%= submit_tag("Submit peer evaluation", :onsubmit => "score_peers()") %> +<% else %> +

Still waiting for peer feedback from the following users: +

+

+<% end %> 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 -- cgit v1.2.3