1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
# frozen_string_literal: true
module Bullet
def self.collected_notifications_of_class(notification_class)
Bullet.notification_collector.collection.select { |notification| notification.is_a? notification_class }
end
def self.collected_counter_cache_notifications
collected_notifications_of_class Bullet::Notification::CounterCache
end
def self.collected_n_plus_one_query_notifications
collected_notifications_of_class Bullet::Notification::NPlusOneQuery
end
def self.collected_unused_eager_association_notifications
collected_notifications_of_class Bullet::Notification::UnusedEagerLoading
end
end
module Bullet
module Detector
class Association
class << self
# returns true if all associations are preloaded
def completely_preloading_associations?
Bullet.collected_n_plus_one_query_notifications.empty?
end
def has_unused_preload_associations?
Bullet.collected_unused_eager_association_notifications.present?
end
# returns true if a given object has a specific association
def creating_object_association_for?(object, association)
object_associations[object.bullet_key].present? &&
object_associations[object.bullet_key].include?(association)
end
# returns true if a given class includes the specific unpreloaded association
def detecting_unpreloaded_association_for?(klass, association)
Bullet.collected_n_plus_one_query_notifications.select do |notification|
notification.base_class == klass.to_s && notification.associations.include?(association)
end.present?
end
# returns true if the given class includes the specific unused preloaded association
def unused_preload_associations_for?(klass, association)
Bullet.collected_unused_eager_association_notifications.select do |notification|
notification.base_class == klass.to_s && notification.associations.include?(association)
end.present?
end
end
end
end
end
|