class MatchReduce::Aggregator
An aggregator is a group of patterns with a reducer that you wish to report on.
Attributes
group_keys[R]
name[R]
patterns[R]
reducer[R]
resolver[R]
Public Class Methods
new(name:, group_keys: [], patterns: [], reducer: nil)
click to toggle source
# File lib/match_reduce/aggregator.rb, line 20 def initialize(name:, group_keys: [], patterns: [], reducer: nil) raise ArgumentError, 'name is required' if name.to_s.empty? @name = name @group_keys = Array(group_keys) @patterns = stringed_keys(ensure_not_empty(array(patterns))) @reducer = reducer freeze end
Public Instance Methods
grouped?()
click to toggle source
# File lib/match_reduce/aggregator.rb, line 39 def grouped? !group_keys.empty? end
keys()
click to toggle source
# File lib/match_reduce/aggregator.rb, line 31 def keys patterns.flat_map(&:keys) end
reduce(memo, record, resolver)
click to toggle source
# File lib/match_reduce/aggregator.rb, line 35 def reduce(memo, record, resolver) reducer ? reducer.call(memo, record, resolver) : memo end
Private Instance Methods
array(val)
click to toggle source
# File lib/match_reduce/aggregator.rb, line 53 def array(val) val.is_a?(Hash) ? [val] : Array(val) end
ensure_not_empty(val)
click to toggle source
# File lib/match_reduce/aggregator.rb, line 57 def ensure_not_empty(val) val.empty? ? [{}] : val end
stringed_keys(hashes)
click to toggle source
# File lib/match_reduce/aggregator.rb, line 47 def stringed_keys(hashes) hashes.map do |hash| hash.map { |k, v| [k.to_s, v] }.to_h end end