Class: UnionOf::Preloader::Association
- Inherits:
-
ActiveRecord::Associations::Preloader::ThroughAssociation
- Object
- ActiveRecord::Associations::Preloader::ThroughAssociation
- UnionOf::Preloader::Association
- Defined in:
- lib/union_of/preloader/association.rb
Instance Method Summary collapse
- #future_classes ⇒ Object
- #load_records ⇒ Object
- #preloaded_records ⇒ Object
- #records_by_owner ⇒ Object
- #runnable_loaders ⇒ Object
Instance Method Details
#future_classes ⇒ Object
39 40 41 42 43 44 45 46 47 |
# File 'lib/union_of/preloader/association.rb', line 39 def future_classes return [] if run? union_classes = union_preloaders.flat_map(&:future_classes).uniq source_classes = source_reflection.chain.map(&:klass) (union_classes + source_classes).uniq end |
#load_records ⇒ Object
7 8 9 |
# File 'lib/union_of/preloader/association.rb', line 7 def load_records(*) preloaded_records # we don't need to load anything except the union associations end |
#preloaded_records ⇒ Object
11 12 13 |
# File 'lib/union_of/preloader/association.rb', line 11 def preloaded_records @preloaded_records ||= union_preloaders.flat_map(&:preloaded_records) end |
#records_by_owner ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/union_of/preloader/association.rb', line 15 def records_by_owner @records_by_owner ||= owners.each_with_object({}) do |owner, result| if loaded?(owner) result[owner] = target_for(owner) next end records = union_records_by_owner[owner] || [] records.compact! records.sort_by! { preload_index[_1] } unless scope.order_values.empty? records.uniq! if scope.distinct_value result[owner] = records end end |
#runnable_loaders ⇒ Object
32 33 34 35 36 37 |
# File 'lib/union_of/preloader/association.rb', line 32 def runnable_loaders return [self] if data_available? union_preloaders.flat_map(&:runnable_loaders) end |