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