class ActiveHashRelation::Aggregation

Attributes

configuration[R]
model[R]
params[R]
resource[R]

Public Class Methods

new(resource, params, model: nil) click to toggle source
# File lib/active_hash_relation/aggregation.rb, line 7
def initialize(resource, params, model: nil)
  @configuration = Module.nesting.last.configuration
  @resource = resource
  @params = HashWithIndifferentAccess.new(params)
  @model = model

  unless @model
    @model = model_class_name(@resource)
    if @model.nil? || engine_name == @model.to_s
      @model = model_class_name(@resource, true)
    end
  end
end

Public Instance Methods

apply() click to toggle source
# File lib/active_hash_relation/aggregation.rb, line 21
def apply
  if params[:aggregate].is_a? Hash
    meta_attributes = HashWithIndifferentAccess.new

    @model.columns.each do |c|
      next unless params[:aggregate][c.name.to_s].is_a? Hash

      case c.type
      when :integer, :float, :decimal
        meta_attributes[c.name.to_s] = apply_aggregations(
          {avg: :average, sum: :sum, max: :maximum, min: :minimum},
          params[:aggregate][c.name.to_s],
          c.name.to_s
        )
      when :date, :datetime, :timestamp
        meta_attributes[c.name.to_s] = apply_aggregations(
          {max: :maximum, min: :minimum},
          params[:aggregate][c.name.to_s],
          c.name.to_s
        )
      end
    end
  end

  return meta_attributes
end
apply_aggregations(available_aggr, asked_aggr, column) click to toggle source
# File lib/active_hash_relation/aggregation.rb, line 48
def apply_aggregations(available_aggr, asked_aggr, column)
  meta_attributes = HashWithIndifferentAccess.new

  available_aggr.each do |k, v|
    if asked_aggr[k]
      meta_attributes[k] = resource.send(v,column)
      meta_attributes[k] = meta_attributes[k].to_f if meta_attributes[k].is_a? BigDecimal
    end
  end

  return meta_attributes
end