Class: Rankmatic::SubmissionsParser
- Inherits:
-
Object
- Object
- Rankmatic::SubmissionsParser
- Defined in:
- lib/rankmatic/submissions_parser.rb
Instance Method Summary collapse
- #build_submission(id) ⇒ Object
-
#initialize(group_by:, rank_by: nil, csv_path:) ⇒ SubmissionsParser
constructor
A new instance of SubmissionsParser.
- #rank ⇒ Object
- #score(row) ⇒ Object
- #submissions ⇒ Object
Constructor Details
#initialize(group_by:, rank_by: nil, csv_path:) ⇒ SubmissionsParser
Returns a new instance of SubmissionsParser.
5 6 7 8 9 10 |
# 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 |
Instance Method Details
#build_submission(id) ⇒ Object
18 19 20 21 |
# 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 ⇒ Object
28 29 30 |
# File 'lib/rankmatic/submissions_parser.rb', line 28 def rank submissions.sort_by(&:average).reverse.map(&:id) end |
#score(row) ⇒ Object
23 24 25 26 |
# 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 ⇒ Object
12 13 14 15 16 |
# File 'lib/rankmatic/submissions_parser.rb', line 12 def submissions @submissions ||= @rows.map { |r| r[@group_by] }.uniq .map { |id| build_submission(id) } end |