Module: Polyamorous::JoinDependencyExtensions

Defined in:
lib/brick.rb

Instance Method Summary collapse

Instance Method Details

#build(associations, base_klass, root = nil, path = '') ⇒ Object



1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
# File 'lib/brick.rb', line 1452

def build(associations, base_klass, root = nil, path = '')
  root ||= associations
  puts associations.map(&:first)

  associations.map do |name, right|
    link_path = path.blank? ? name.to_s : path + ".#{name}"
    ja = if name.is_a? ::Polyamorous::Join
           reflection = find_reflection base_klass, name.name
           reflection.check_validity!
           reflection.check_eager_loadable!

           klass = if reflection.polymorphic?
                     name.klass || base_klass
                   else
                     reflection.klass
                   end
           ::ActiveRecord::Associations::JoinDependency::JoinAssociation.new(
             reflection, build(right, klass, root, link_path), name.klass, name.type
           )
         else
           reflection = find_reflection base_klass, name
           reflection.check_validity!
           reflection.check_eager_loadable!

           if reflection.polymorphic?
             raise ActiveRecord::EagerLoadPolymorphicError.new(reflection)
           end
           ::ActiveRecord::Associations::JoinDependency::JoinAssociation.new(
             reflection, build(right, reflection.klass, root, link_path)
           )
         end
    ja.instance_variable_set(:@link_path, link_path) # Make note on the JoinAssociation of its AR path
    ja.instance_variable_set(:@assocs, root)
    ja
  end
end