Class: ActiveRecord::Summarize::CalculationResult
- Inherits:
-
Object
- Object
- ActiveRecord::Summarize::CalculationResult
- Defined in:
- lib/activerecord/summarize.rb
Instance Attribute Summary collapse
-
#column ⇒ Object
readonly
Returns the value of attribute column.
-
#method ⇒ Object
readonly
Returns the value of attribute method.
-
#relation ⇒ Object
readonly
Returns the value of attribute relation.
Instance Method Summary collapse
- #function ⇒ Object
-
#initialize(relation, method, column) ⇒ CalculationResult
constructor
A new instance of CalculationResult.
- #select_value(base_relation) ⇒ Object
- #unmatch_arel_node ⇒ Object
Constructor Details
#initialize(relation, method, column) ⇒ CalculationResult
Returns a new instance of CalculationResult.
259 260 261 262 263 |
# File 'lib/activerecord/summarize.rb', line 259 def initialize(relation, method, column) @relation = relation @method = method @column = column end |
Instance Attribute Details
#column ⇒ Object (readonly)
Returns the value of attribute column.
257 258 259 |
# File 'lib/activerecord/summarize.rb', line 257 def column @column end |
#method ⇒ Object (readonly)
Returns the value of attribute method.
257 258 259 |
# File 'lib/activerecord/summarize.rb', line 257 def method @method end |
#relation ⇒ Object (readonly)
Returns the value of attribute relation.
257 258 259 |
# File 'lib/activerecord/summarize.rb', line 257 def relation @relation end |
Instance Method Details
#function ⇒ Object
280 281 282 283 284 285 286 |
# File 'lib/activerecord/summarize.rb', line 280 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
265 266 267 268 269 270 |
# File 'lib/activerecord/summarize.rb', line 265 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_node ⇒ Object
272 273 274 275 276 277 278 |
# File 'lib/activerecord/summarize.rb', line 272 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 |