class Bullet::Detector::UnusedEagerLoading
def add_eager_loadings(objects, associations)
def add_eager_loadings(objects, associations) return unless Bullet.start? return unless Bullet.unused_eager_loading_enable? return if objects.map(&:bullet_primary_key_value).compact.empty? Bullet.debug( 'Detector::UnusedEagerLoading#add_eager_loadings', "objects: #{objects.map(&:bullet_key).join(', ')}, associations: #{associations}" ) bullet_keys = objects.map(&:bullet_key) to_add = [] to_merge = [] to_delete = [] eager_loadings.each do |k, _v| key_objects_overlap = k & bullet_keys next if key_objects_overlap.empty? bullet_keys -= k if key_objects_overlap == k to_add << [k, associations] else to_merge << [key_objects_overlap, (eager_loadings[k].dup << associations)] keys_without_objects = k - key_objects_overlap to_merge << [keys_without_objects, eager_loadings[k]] to_delete << k end end to_add.each { |k, val| eager_loadings.add k, val } to_merge.each { |k, val| eager_loadings.merge k, val } to_delete.each { |k| eager_loadings.delete k } eager_loadings.add bullet_keys, associations unless bullet_keys.empty? end