Sha256: 9a330c663d7d1478197bf09fa1e1c1fe344ae9f71727aa8d65d6920f17bd7fa5

Contents?: true

Size: 1.41 KB

Versions: 5

Compression:

Stored size: 1.41 KB

Contents

module Alf
  module Engine
    class Summarize::Cesure
      include Summarize
      include Cesure

      # @return [Enumerable] The operand
      attr_reader :operand

      # @return [AttrList] Summarization key
      attr_reader :by

      # @return [Summarization] The summarization to use
      attr_reader :summarization

      # @return [Boolean] Make an allbut summarization?
      attr_reader :allbut

      # Creates an Summarize::Cesure instance
      def initialize(operand, by, summarization, allbut, expr = nil, compiler = nil)
        super(expr, compiler)
        @operand = operand
        @by = by
        @summarization = summarization
        @allbut = allbut
      end

    protected

      # (see Cesure#project)
      def project(tuple)
        @by.project_tuple(tuple, @allbut)
      end
      
      # (see Cesure#start_cesure)
      def start_cesure(key, receiver)
        @scope = tuple_scope unless @scope
        @aggs  = @summarization.least
      end

      # (see Cesure#accumulate_cesure)
      def accumulate_cesure(tuple, receiver)
        @aggs = @summarization.happens(@aggs, @scope.__set_tuple(tuple))
      end

      # (see Cesure#flush_cesure)
      def flush_cesure(key, receiver)
        @aggs = @summarization.finalize(@aggs)
        result = receiver.call key.merge(@aggs)
        @scope = nil
        result
      end

    end # class Summarize::Cesure
  end # module Engine
end # module Alf

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
alf-core-0.16.3 lib/alf/engine/summarize/cesure.rb
alf-core-0.16.2 lib/alf/engine/summarize/cesure.rb
alf-core-0.16.1 lib/alf/engine/summarize/cesure.rb
alf-core-0.16.0 lib/alf/engine/summarize/cesure.rb
alf-core-0.15.0 lib/alf/engine/summarize/cesure.rb