module Believer::ActAsEnumerable

Public Class Methods

included(base) click to toggle source
# File lib/believer/act_as_enumerable.rb, line 4
def self.included(base)
  methods_not_delegated_to_array = [:first, :last, :any?, :exists?, :count]
  enumerable_delegate_methods = Enumerable.instance_methods(false).map { |enum_method|
    enum_method.to_sym
  } - methods_not_delegated_to_array

  base.delegate *enumerable_delegate_methods, :to => :to_a
  base.delegate :each, :size, :[], :to => :to_a
end

Public Instance Methods

any?() click to toggle source
# File lib/believer/act_as_enumerable.rb, line 48
def any?
  return loaded_objects.any? unless loaded_objects.nil?
  q = clone
  q.limit(1).count > 0
end
count() click to toggle source
# File lib/believer/act_as_enumerable.rb, line 14
def count
  return loaded_objects.size unless loaded_objects.nil?

  count_q = clone
  count_q.selects = ['COUNT(*)']
  result = count_q.execute

  cnt = -1
  result.each do |row|
    cnt = row['count']
  end
  cnt
end
exists?(*args) click to toggle source

Tests if there are any records present which conform to the argument filter(s) @param args [Object] a filter condition. This argument has the same usage as the where method

# File lib/believer/act_as_enumerable.rb, line 30
def exists?(*args)
  return count > 0 if args.nil? || args.size == 0
  where(*args).exists?
end
first() click to toggle source
# File lib/believer/act_as_enumerable.rb, line 35
def first
  return loaded_objects.first unless loaded_objects.nil?
  clone.limit(1)[0]
end
last() click to toggle source
# File lib/believer/act_as_enumerable.rb, line 40
def last
  return loaded_objects.last unless loaded_objects.nil?
  raise "Cannot retrieve last if no order column is set" if @order_by.nil?
  lq = clone.limit(1)
  lq.order_by = @order_by.inverse
  lq[0]
end