class Rankmatic::SubmissionsParser
Public Class Methods
new(group_by:, rank_by: nil, csv_path:)
click to toggle source
# File lib/rankmatic/submissions_parser.rb, line 5 def initialize(group_by:, rank_by: nil, csv_path:) @group_by = group_by @rank_by = rank_by @rows = [] CSV.foreach(csv_path, headers: true) { |r| @rows << r.to_h } end
Public Instance Methods
build_submission(id)
click to toggle source
# File lib/rankmatic/submissions_parser.rb, line 18 def build_submission(id) scores = @rows.select { |r| r[@group_by] == id }.map {|r| score(r) } Submission.new(id: id, scores: scores) end
rank()
click to toggle source
# File lib/rankmatic/submissions_parser.rb, line 28 def rank submissions.sort_by(&:average).reverse.map(&:id) end
score(row)
click to toggle source
# File lib/rankmatic/submissions_parser.rb, line 23 def score(row) return row[@rank_by].to_i if @rank_by row.delete_if { |k, _| k == @group_by }.values.map(&:to_i).reduce(&:+) end
submissions()
click to toggle source
# File lib/rankmatic/submissions_parser.rb, line 12 def submissions @submissions ||= @rows.map { |r| r[@group_by] }.uniq .map { |id| build_submission(id) } end