Class: Rankmatic::SubmissionsParser

Inherits:
Object
  • Object
show all
Defined in:
lib/rankmatic/submissions_parser.rb

Instance Method Summary collapse

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

#rankObject



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

#submissionsObject



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