class MatchReduce::Processor::ResultBuilder

This class understands how to take an aggregator and derive a result for it.

Attributes

aggregator[R]
group_ids[R]
records[R]
resolver[R]
value[R]

Public Class Methods

new(aggregator, resolver) click to toggle source
# File lib/match_reduce/processor/result_builder.rb, line 16
def initialize(aggregator, resolver)
  raise ArgumentError, 'aggregator is required' unless aggregator
  raise ArgumentError, 'resolver is required' unless resolver

  @aggregator = aggregator
  @resolver = resolver

  @records    = []
  @value      = nil
  @group_ids  = Set.new
end

Public Instance Methods

add(record, group_id) click to toggle source
# File lib/match_reduce/processor/result_builder.rb, line 28
def add(record, group_id)
  if aggregator.grouped?
    return self if group_ids.include?(group_id)

    group_ids << group_id
  end

  records << record

  @value = aggregator.reduce(value, record, resolver)

  self
end
result() click to toggle source
# File lib/match_reduce/processor/result_builder.rb, line 42
def result
  Result.new(aggregator.name, records, value)
end