class ReportsKits::Reports::Data::AggregateOneDimension

Attributes

dimension[RW]
series[RW]

Public Class Methods

new(series) click to toggle source
# File lib/reports_kits/reports/data/aggregate_one_dimension.rb, line 7
def initialize(series)
  self.series = series
  self.dimension = series.dimensions[0]
end

Public Instance Methods

perform() click to toggle source
# File lib/reports_kits/reports/data/aggregate_one_dimension.rb, line 12
def perform
  dimension_keys_values
end

Private Instance Methods

dimension_keys_values() click to toggle source
# File lib/reports_kits/reports/data/aggregate_one_dimension.rb, line 18
def dimension_keys_values
  relation = series.filtered_relation
  relation = relation.group(dimension.group_expression)
  relation = relation.joins(dimension.joins) if dimension.joins
  relation = relation.limit(dimension.dimension_instances_limit) if dimension.dimension_instances_limit
  relation = relation.order(order)
  relation = series.edit_relation_method.call(relation) if series.edit_relation_method
  dimension_keys_values = relation.distinct.public_send(*series.aggregate_function)
  dimension_keys_values = Utils.populate_sparse_hash(dimension_keys_values, dimension: dimension)
  dimension_keys_values.delete(nil)
  dimension_keys_values.delete('')
  dimension_keys_values = dimension_keys_values.take(series.limit) if series.limit
  Hash[dimension_keys_values]
end
order() click to toggle source
# File lib/reports_kits/reports/data/aggregate_one_dimension.rb, line 33
def order
  dimension.configured_by_time? ? '2' : '1 DESC'
end