Module: NoBrainer::Criteria::EagerLoad

Extended by:
ActiveSupport::Concern
Defined in:
lib/no_brainer/criteria/eager_load.rb

Instance Method Summary collapse

Instance Method Details

#each(options = {}, &block) ⇒ Object



25
26
27
28
29
30
31
32
33
34
# File 'lib/no_brainer/criteria/eager_load.rb', line 25

def each(options={}, &block)
  return super unless should_eager_load? && !options[:no_eager_loading] && block

  docs = []
  super(options.merge(:no_eager_loading => true)) { |doc| docs << doc }
  # TODO batch the eager loading with NoBrainer::Config.criteria_cache_max_entries
  perform_eager_load(docs)
  docs.each(&block)
  self
end

#eager_load(*values) ⇒ Object



6
7
8
# File 'lib/no_brainer/criteria/eager_load.rb', line 6

def eager_load(*values)
  chain({:eager_load => values}, :copy_cache_from => self)
end

#merge!(criteria, options = {}) ⇒ Object



15
16
17
18
19
20
21
22
23
# File 'lib/no_brainer/criteria/eager_load.rb', line 15

def merge!(criteria, options={})
  super.tap do
    # If we already have some cached documents, and we need to so some eager
    # loading, then we do it now. It's easier than doing it lazily.
    if self.cached? && criteria.options[:eager_load].present?
      perform_eager_load(@cache)
    end
  end
end

#preload(*values) ⇒ Object



10
11
12
13
# File 'lib/no_brainer/criteria/eager_load.rb', line 10

def preload(*values)
  STDERR.puts "[NoBrainer] `preload' is deprecated and will be removed, please use `eager_load' instead"
  eager_load(*values)
end