module NoBrainer::Criteria::EagerLoad

Public Instance Methods

each(options={}, &block) click to toggle source
Calls superclass method
# 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) click to toggle source
# 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={}) click to toggle source
Calls superclass method
# 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) click to toggle source
# 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

Private Instance Methods

get_one(criteria) click to toggle source
Calls superclass method
# File lib/no_brainer/criteria/eager_load.rb, line 42
def get_one(criteria)
  super.tap { |doc| perform_eager_load([doc]) }
end
perform_eager_load(docs) click to toggle source
# File lib/no_brainer/criteria/eager_load.rb, line 46
def perform_eager_load(docs)
  if should_eager_load? && docs.present?
    NoBrainer.eager_load(docs, @options[:eager_load])
  end
end
should_eager_load?() click to toggle source
# File lib/no_brainer/criteria/eager_load.rb, line 38
def should_eager_load?
  @options[:eager_load].present? && !raw?
end