Class: UnionOf::Preloader::Association

Inherits:
ActiveRecord::Associations::Preloader::ThroughAssociation
  • Object
show all
Defined in:
lib/union_of/preloader/association.rb

Instance Method Summary collapse

Instance Method Details

#future_classesObject



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_recordsObject



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_recordsObject



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_ownerObject



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_loadersObject



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