Class: ActiveRecord::Summarize::CalculationResult

Inherits:
Object
  • Object
show all
Defined in:
lib/activerecord/summarize.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(relation, method, column) ⇒ CalculationResult

Returns a new instance of CalculationResult.



235
236
237
238
239
# File 'lib/activerecord/summarize.rb', line 235

def initialize(relation, method, column)
  @relation = relation
  @method = method
  @column = column
end

Instance Attribute Details

#columnObject (readonly)

Returns the value of attribute column.



233
234
235
# File 'lib/activerecord/summarize.rb', line 233

def column
  @column
end

#methodObject (readonly)

Returns the value of attribute method.



233
234
235
# File 'lib/activerecord/summarize.rb', line 233

def method
  @method
end

#relationObject (readonly)

Returns the value of attribute relation.



233
234
235
# File 'lib/activerecord/summarize.rb', line 233

def relation
  @relation
end

Instance Method Details

#functionObject



256
257
258
259
260
261
262
# File 'lib/activerecord/summarize.rb', line 256

def function
  case method
  when "sum" then Arel::Nodes::Sum
  when "count" then Arel::Nodes::Count
  else raise "Unknown calculation method"
  end
end

#select_value(base_relation) ⇒ Object



241
242
243
244
245
246
# File 'lib/activerecord/summarize.rb', line 241

def select_value(base_relation)
  where = relation.where_clause - base_relation.where_clause
  for_select = column
  for_select = Arel::Nodes::Case.new(where.ast).when(true, for_select).else(unmatch_arel_node) unless where.empty?
  function.new([for_select]).tap { |f| f.distinct = relation.distinct_value }
end

#unmatch_arel_nodeObject



248
249
250
251
252
253
254
# File 'lib/activerecord/summarize.rb', line 248

def unmatch_arel_node
  case method
  when "sum" then 0 # Adding zero to a sum does nothing
  when "count" then nil # In SQL, null is no value and is not counted
  else raise "Unknown calculation method"
  end
end