Sha256: 3ffec07aeb27cb98fd3b08dfe304dab039da08802b75553c1d586ef86d1c86b0

Contents?: true

Size: 1.84 KB

Versions: 1

Compression:

Stored size: 1.84 KB

Contents

module ActiveMocker

  class RecordNotFound < Exception

  end
module Collection



  module Queries

    def delete_all
      all.map(&:delete)
    end

    def destroy_all
      delete_all
    end

    def all(options={})
      if options.has_key?(:conditions)
        where(options[:conditions])
      else
        Relation.new( to_a || [] )
      end
    end

    class WhereNotChain

      def initialize(collection)
        @collection = collection
      end

      def not(options={})
        @collection.reject do |record|
          options.all? { |col, match| record.send(col) == match }
        end
      end

    end

    def where(options=nil)
      return WhereNotChain.new(all) if options.nil?
      all.select do |record|
        options.all? { |col, match| record.send(col) == match }
      end
    end

    def find(ids)
      ids_array = [*ids]
      results = ids_array.map do |id|
        where(id: id).first
      end
      return Relation.new(results) if ids.class == Array
      return results.first
    end

    def update_all(options)
      all.each{ |i| i.update(options)}
    end

    def find_by(options = {})
      send(:where, options).first
    end

    def find_by!(options={})
      result = find_by(options)
      raise RecordNotFound if result.blank?
      result
    end

    def limit(num)
      Relation.new(all.take(num))
    end

    def sum(key)
      values = values_by_key(key)
      values.inject { |sum, n| sum + n }
    end

    def average(key)
      values = values_by_key(key)
      total = values.inject { |sum, n| sum + n }
      BigDecimal.new(total) / BigDecimal.new(values.count)
    end

    def minimum(key)
      values_by_key(key).min_by{|i| i }
    end

    def maximum(key)
      values_by_key(key).max_by { |i| i }
    end

    private

    def values_by_key(key)
      all.map { |obj| obj.send(key) }
    end

  end

end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
active_mocker-1.3 lib/active_mocker/collection/queries.rb