Module: NoBrainer::Criteria::EagerLoad
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/no_brainer/criteria/eager_load.rb
Instance Method Summary collapse
- #each(options = {}, &block) ⇒ Object
- #eager_load(*values) ⇒ Object
- #merge!(criteria, options = {}) ⇒ Object
- #preload(*values) ⇒ Object
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(={}, &block) return super unless should_eager_load? && ![:no_eager_loading] && block docs = [] super(.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, ={}) 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.[: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 |