class Differential::Calculator::Report

This class is responsible for building an entire report. Usage:

The Report object will keep running sums and deltas of all added records.

Public Instance Methods

add(record, side) click to toggle source
# File lib/differential/calculator/report.rb, line 29
def add(record, side)
  raise ArgumentError, 'record is required' unless record
  raise ArgumentError, 'side is required'   unless side

  totals.add(record.value, side)

  upsert_group(record, side)

  self
end
groups() click to toggle source
# File lib/differential/calculator/report.rb, line 25
def groups
  groups_by_id.values
end
sorted_groups() click to toggle source
# File lib/differential/calculator/report.rb, line 21
def sorted_groups
  groups.sort_by { |group| group.id.value }
end

Private Instance Methods

groups_by_id() click to toggle source
# File lib/differential/calculator/report.rb, line 54
def groups_by_id
  @groups_by_id ||= {}
end
upsert_group(record, side) click to toggle source
# File lib/differential/calculator/report.rb, line 42
def upsert_group(record, side)
  group_id_key  = record.group_id.value
  group_id      = record.group_id

  # Create a new group if one does not exist
  groups_by_id[group_id_key] = Group.new(group_id) unless groups_by_id.key?(group_id_key)

  groups_by_id[group_id_key].add(record, side)

  nil
end