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