class Axiom::Algebra::Summarization::Summary

The summary for an aggregate function grouped by tuple

Public Class Methods

new(summarizer) click to toggle source

Initialize a Summary

@param [#call] summarizer

@return [undefined]

@api private

# File lib/axiom/algebra/summarization/summary.rb, line 17
def initialize(summarizer)
  @summarizer = summarizer
  @summary    = Hash.new(summary_default)
end

Public Instance Methods

call(tuple) click to toggle source

Return the finalized summary for a tuple

@example

object = summary.call(tuple)

@param [Tuple] tuple

@return [Object]

@api public

# File lib/axiom/algebra/summarization/summary.rb, line 50
def call(tuple)
  summary_finalize(@summary[tuple])
end
summarize_by(projection, tuple) click to toggle source

Summarize the aggregate function by a tuple

@example

summary = summary.summarize_by(projection, tuple)

@param [Tuple] projection

the tuple projection to summarize the results by

@param [Tuple] tuple

the tuple to execute the aggregate function with

@return [self]

@api public

# File lib/axiom/algebra/summarization/summary.rb, line 35
def summarize_by(projection, tuple)
  @summary[projection] = @summarizer.call(@summary[projection], tuple)
  self
end

Private Instance Methods

summary_default() click to toggle source

Return the summary default

@return [Object]

@api private

# File lib/axiom/algebra/summarization/summary.rb, line 61
def summary_default
  @summarizer.default if @summarizer.respond_to?(:default)
end
summary_finalize(value) click to toggle source

Finalize the summary value if possible

@param [Object] value

@return [Object]

@api private

# File lib/axiom/algebra/summarization/summary.rb, line 72
def summary_finalize(value)
  if @summarizer.respond_to?(:finalize)
    @summarizer.finalize(value)
  else
    value
  end
end