rzane/baby_squeel

View on GitHub
lib/baby_squeel/active_record/calculations.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'baby_squeel/calculation'

module BabySqueel
  module ActiveRecord
    module Calculations
      def plucking(&block)
        nodes = Array.wrap(DSL.evaluate(self, &block))
        pluck(*nodes)
      end

      def counting(&block)
        count Calculation.new(DSL.evaluate(self, &block))
      end

      def summing(&block)
        sum Calculation.new(DSL.evaluate(self, &block))
      end

      def averaging(&block)
        average Calculation.new(DSL.evaluate(self, &block))
      end

      def minimizing(&block)
        minimum Calculation.new(DSL.evaluate(self, &block))
      end

      def maximizing(&block)
        maximum Calculation.new(DSL.evaluate(self, &block))
      end

      private

      # @override
      def aggregate_column(column_name)
        if column_name.kind_of? Calculation
          column_name.node
        else
          super
        end
      end
    end
  end
end