Module: N1Loader::ActiveRecord::Associations::Preloader

Defined in:
lib/n1_loader/active_record/associations_preloader.rb,
lib/n1_loader/active_record/associations_preloader_v5.rb,
lib/n1_loader/active_record/associations_preloader_v6.rb

Overview

:nodoc:

Defined Under Namespace

Classes: N1LoaderReflection

Instance Method Summary collapse

Instance Method Details

#grouped_records(association, records, polymorphic_parent) ⇒ Object

rubocop:disable Metrics/PerceivedComplexity, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/AbcSize



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/n1_loader/active_record/associations_preloader.rb', line 27

def grouped_records # rubocop:disable Metrics/PerceivedComplexity, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/AbcSize
  n1_load_records, records = source_records.partition do |record|
    record.class.respond_to?(:n1_loaders) && record.class.n1_loaders[association]
  end

  h = n1_load_records.group_by do |record|
    N1LoaderReflection.new(association, record.class.n1_loaders[association])
  end

  polymorphic_parent = !root? && parent.polymorphic?
  records.each do |record|
    reflection = record.class._reflect_on_association(association)
    next if polymorphic_parent && !reflection || !record.association(association).klass

    (h[reflection] ||= []) << record
  end
  h
end

#preloaders_for_one(association, records, scope) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/n1_loader/active_record/associations_preloader_v5.rb', line 13

def preloaders_for_one(association, records, scope)
  grouped_records(association, records).flat_map do |reflection, klasses|
    next N1Loader::Preloader.new(records).preload(reflection.name) if reflection.is_a?(N1LoaderReflection)

    klasses.map do |rhs_klass, rs|
      loader = preloader_for(reflection, rs).new(rhs_klass, rs, reflection, scope)
      loader.run self
      loader
    end
  end
end

#preloaders_for_reflection(reflection, records, scope) ⇒ Object



21
22
23
24
25
# File 'lib/n1_loader/active_record/associations_preloader.rb', line 21

def preloaders_for_reflection(reflection, records)
  return super unless reflection.is_a?(N1LoaderReflection)

  N1Loader::Preloader.new(records).preload(reflection.name)
end