module ActiveReporter::Report::Metrics

Public Instance Methods

aggregators() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 10
def aggregators
  @aggregators ||= build_axes(self.class.aggregators.slice(*Array(params.fetch(:aggregators, self.class.aggregators.keys)).collect(&:to_sym)))
end
all_aggregators() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 60
def all_aggregators
  aggregators.merge(calculators).merge(trackers).merge(evaluators)
end
base_relation() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 32
def base_relation
  params.fetch(:relation, report_model.all)
end
calculators() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 48
def calculators
  @calculators ||= build_axes(self.class.calculators.slice(*(Array(params[:calculators])+Array(params[:aggregators])).collect(&:to_sym).uniq))
end
dimensions() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 6
def dimensions
  @dimensions ||= build_axes(self.class.dimensions)
end
evaluators() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 56
def evaluators
  @evaluators ||= build_axes(self.class.evaluators.slice(*(Array(params[:evaluators])+Array(params[:aggregators])).collect(&:to_sym).uniq))
end
fields() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 64
def fields
  [groupers, calculators.keys, trackers.keys, evaluators.keys].inject(&:merge)
end
filters() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 24
def filters
  @filters ||= dimensions.values.select(&:filtering?)
end
grouper_names() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 14
def grouper_names
  names = params.fetch(:groupers, [dimensions.except(:totals).keys.first])
  names = names.is_a?(Hash) ? names.values : Array.wrap(names).compact
  names.map(&:to_sym)
end
groupers() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 20
def groupers
  @groupers ||= dimensions.values_at(*grouper_names)
end
groups() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 44
def groups
  @groups ||= groupers.reduce(records) { |relation, dimension| dimension.group(relation) }
end
records() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 40
def records
  @records ||= filters.reduce(relation) { |relation, dimension| dimension.filter(relation) }
end
relation() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 36
def relation
  @relation ||= relators.reduce(base_relation) { |relation, dimension| dimension.relate(relation) }
end
relators() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 28
def relators
  filters | groupers
end
total_report() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 68
def total_report
  @total_report ||= self.class.new(@params.except(:calculators).merge({ groupers: :totals })) unless @total_data.present?
end
trackers() click to toggle source
# File lib/active_reporter/report/metrics.rb, line 52
def trackers
  @trackers ||= build_axes(self.class.trackers.slice(*(Array(params[:trackers])+Array(params[:aggregators])).collect(&:to_sym).uniq))
end

Private Instance Methods

build_axes(axes) click to toggle source
# File lib/active_reporter/report/metrics.rb, line 74
def build_axes(axes)
  axes.map { |name, h| [name, h[:axis_class].new(name, self, h[:opts])] }.to_h
end