class Mongoid::Report::Collection

Attributes

context[R]
rows[R]

Public Class Methods

new(context, rows, fields, columns, mapping) click to toggle source
# File lib/mongoid/report/collection.rb, line 7
def initialize(context, rows, fields, columns, mapping)
  @context = context
  @rows    = rows
  @fields  = fields
  @columns = columns
  @mapping = mapping
  @rows    = Rows.new(compile_rows)
end

Public Instance Methods

headers() click to toggle source
# File lib/mongoid/report/collection.rb, line 20
def headers
  @fields
end
summary() click to toggle source
# File lib/mongoid/report/collection.rb, line 24
def summary
  @summary ||= @rows.reduce(Hash.new{|h, k| h[k] = 0}) do |summary, row|
    # Find summary for aggregated rows
    @fields.each do |field|
      # Don't apply for dynamic calculated columns lets wait until we get
      # all summaried mongo columns and then apply dynamic columns
      # calculations.
      next if @columns.has_key?(field)
      next unless row[field].is_a?(Fixnum) || row[field].is_a?(Float)
      summary[field] += row[field]
    end

    # Apply dynamic columns for summarized row
    @columns.each do |name, function|
      next unless @fields.include?(name)
      summary[name] = function.call(@context, summary, { mapping: @mapping, summary: true })
    end

    summary
  end
end

Private Instance Methods

compile_rows() click to toggle source
# File lib/mongoid/report/collection.rb, line 48
def compile_rows
  @rows.map do |row|
    @columns.each do |name, function|
      next unless @fields.include?(name)
      row[name] = function.call(@context, row, { mapping: @mapping, summary: false })
    end

    row
  end
end