Sha256: 56765a139b0c7562e57403b42f8e592ab32c1f28b487cc3c978ba2c5fbf80886

Contents?: true

Size: 1.35 KB

Versions: 28

Compression:

Stored size: 1.35 KB

Contents

module Bmg
  class Summarizer
    #
    # ValueBy summarizer.
    #
    # Example:
    #
    #   # direct ruby usage
    #   Bmg::Summarizer.value_by(:qty, :by => :serie).summarize(...)
    #
    class ValueBy < Summarizer

      DEFAULT_OPTIONS = {
        :symbolize => false
      }

      # Returns {} as least value.
      def least
        {}
      end

      # Collects the value
      def happens(memo, tuple)
        by = tuple[options[:by]]
        by = by.to_sym if by && options[:symbolize]
        misuse!(tuple, memo) if memo.has_key?(by)
        memo.tap{|m|
          m[by] = extract_value(tuple)
        }
      end

      # Finalizes the computation.
      def finalize(memo)
        default_tuple.merge(memo)
      end

    private

      def default_tuple
        (options[:series] || []).each_with_object({}){|s,ss|
          s_def = options[:default]
          s = s.to_sym if s && options[:symbolize]
          ss[s] = s_def
        }
      end

      def misuse!(tuple, memo)
        msg = "Summarizer.value_by: summarization key + the serie must form be a candidate key"
        msg += "\n"
        msg += "  Tuple: #{tuple.inspect}"
        msg += "  Memo:  #{memo.inspect}"
        raise MisuseError, msg
      end

    end # class ValueBy

    def self.value_by(*args, &bl)
      ValueBy.new(*args, &bl)
    end

  end # class Summarizer
end # module Bmg

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
bmg-0.23.3 lib/bmg/summarizer/value_by.rb
bmg-0.23.2 lib/bmg/summarizer/value_by.rb
bmg-0.23.1 lib/bmg/summarizer/value_by.rb
bmg-0.23.0 lib/bmg/summarizer/value_by.rb
bmg-0.21.5 lib/bmg/summarizer/value_by.rb
bmg-0.21.4 lib/bmg/summarizer/value_by.rb
bmg-0.20.5 lib/bmg/summarizer/value_by.rb
bmg-0.19.3 lib/bmg/summarizer/value_by.rb
bmg-0.21.3 lib/bmg/summarizer/value_by.rb
bmg-0.21.2 lib/bmg/summarizer/value_by.rb
bmg-0.21.0 lib/bmg/summarizer/value_by.rb
bmg-0.20.4 lib/bmg/summarizer/value_by.rb
bmg-0.20.2 lib/bmg/summarizer/value_by.rb
bmg-0.20.1 lib/bmg/summarizer/value_by.rb
bmg-0.20.0 lib/bmg/summarizer/value_by.rb
bmg-0.19.2 lib/bmg/summarizer/value_by.rb
bmg-0.19.1 lib/bmg/summarizer/value_by.rb
bmg-0.19.0 lib/bmg/summarizer/value_by.rb
bmg-0.18.15 lib/bmg/summarizer/value_by.rb
bmg-0.18.14 lib/bmg/summarizer/value_by.rb