Module: Believer::ActAsEnumerable

Included in:
Query
Defined in:
lib/believer/act_as_enumerable.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



4
5
6
7
8
9
10
11
12
# 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

Instance Method Details

#any?Boolean

Returns:

  • (Boolean)


48
49
50
51
52
# 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

#countObject



14
15
16
17
18
19
20
21
22
23
24
25
26
# 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) ⇒ Boolean

Tests if there are any records present which conform to the argument filter(s)

Parameters:

  • args (Object)

    a filter condition. This argument has the same usage as the where method

Returns:

  • (Boolean)


30
31
32
33
# 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

#firstObject



35
36
37
38
# File 'lib/believer/act_as_enumerable.rb', line 35

def first
  return loaded_objects.first unless loaded_objects.nil?
  clone.limit(1)[0]
end

#lastObject



40
41
42
43
44
45
46
# 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