Class: MatchReduce::Processor::ResultBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/match_reduce/processor/result_builder.rb

Overview

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

Instance Method Summary collapse

Constructor Details

#initialize(aggregator, resolver) ⇒ ResultBuilder

Returns a new instance of ResultBuilder.

Raises:



16
17
18
19
20
21
22
23
24
25
26
# 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

Instance Method Details

#add(record, group_id) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
# 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

#resultObject



42
43
44
# File 'lib/match_reduce/processor/result_builder.rb', line 42

def result
  Result.new(aggregator.name, records, value)
end