module NoBrainer::Criteria::Aggregate

Public Instance Methods

avg(*a, &b) click to toggle source
# File lib/no_brainer/criteria/aggregate.rb, line 16
def avg(*a, &b)
  run { aggregate_rql(:avg, *a, &b) }
end
max(*a, &b) click to toggle source
# File lib/no_brainer/criteria/aggregate.rb, line 8
def max(*a, &b)
  order_by(a, &b).last
end
min(*a, &b) click to toggle source
# File lib/no_brainer/criteria/aggregate.rb, line 4
def min(*a, &b)
  order_by(a, &b).first
end
sum(*a, &b) click to toggle source
# File lib/no_brainer/criteria/aggregate.rb, line 12
def sum(*a, &b)
  run { aggregate_rql(:sum, *a, &b) }
end

Private Instance Methods

aggregate_rql(type, *a, &b) click to toggle source
# File lib/no_brainer/criteria/aggregate.rb, line 22
def aggregate_rql(type, *a, &b)
  rql = without_ordering.without_plucking.to_rql
  rql = rql.__send__(type, *model.with_fields_aliased(a), &b)
  rql = rql.default(nil) unless type == :sum
  rql
end