Class: DeepPreloader
- Inherits:
-
Object
- Object
- DeepPreloader
- Defined in:
- lib/deep_preloader.rb,
lib/deep_preloader/version.rb
Defined Under Namespace
Classes: AbstractSpec, PolymorphicSpec, PreloadWorker, Spec, WorklistContext, WorklistEntry
Constant Summary collapse
- VERSION =
'1.0.0'
Class Method Summary collapse
Class Method Details
.preload(models, spec, lock: nil) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/deep_preloader.rb', line 9 def self.preload(models, spec, lock: nil) return if spec.nil? || models.blank? worker = PreloadWorker.new(lock: lock) spec = Spec.parse(spec) unless spec.is_a?(AbstractSpec) models_by_class = Array.wrap(models).group_by(&:class) case spec when Spec unless models_by_class.size == 1 raise ArgumentError.new("Provided multiple model types to non-polymorphic preload spec") end model_class, models = models_by_class.first worker.add_associations_from_spec(models, model_class, spec) when PolymorphicSpec models_by_class.each do |model_class, models| model_spec = spec.for_type(model_class) next unless model_spec worker.add_associations_from_spec(models, model_class, model_spec) end end worker.run! models end |