module Bullet
Constants
- DETECTORS
- VERSION
Attributes
Public Class Methods
Source
# File lib/bullet.rb, line 112 def add_safelist(options) reset_safelist @safelist[options[:type]][options[:class_name]] ||= [] @safelist[options[:type]][options[:class_name]] << options[:association].to_sym end
Source
# File lib/bullet.rb, line 88 def app_root @app_root ||= (defined?(::Rails.root) && !::Rails.root.nil? ? Rails.root.to_s : Dir.pwd).to_s end
Rails.root might be nil if ‘railties` is a dependency on a project that does not use Rails
Source
# File lib/bullet.rb, line 137 def bullet_logger=(active) if active require 'fileutils' FileUtils.mkdir_p(app_root + '/log') bullet_log_file = File.open("#{app_root}/log/bullet.log", 'a+') bullet_log_file.sync = true UniformNotifier.customized_logger = bullet_log_file end end
Source
# File lib/bullet.rb, line 258 def console_enabled? UniformNotifier.active_notifiers.include?(UniformNotifier::JavascriptConsole) end
Source
# File lib/bullet.rb, line 100 def counter_cache_enable? enable? && (@counter_cache_enable.nil? ? true : @counter_cache_enable) end
Source
# File lib/bullet.rb, line 147 def debug(title, message) puts "[Bullet][#{title}] #{message}" if ENV['BULLET_DEBUG'] == 'true' end
Source
# File lib/bullet.rb, line 118 def delete_safelist(options) reset_safelist @safelist[options[:type]][options[:class_name]] ||= [] @safelist[options[:type]][options[:class_name]].delete(options[:association].to_sym) @safelist[options[:type]].delete_if { |_key, val| val.empty? } end
Source
# File lib/bullet.rb, line 66 def enable=(enable) @enable = enable if enable? reset_safelist unless orm_patches_applied self.orm_patches_applied = true Bullet::Mongoid.enable if mongoid? Bullet::ActiveRecord.enable if active_record? end end end
Also aliased as: enabled=
Source
# File lib/bullet.rb, line 172 def end_request Thread.current.thread_variable_set(:bullet_start, nil) Thread.current.thread_variable_set(:bullet_notification_collector, nil) Thread.current.thread_variable_set(:bullet_object_associations, nil) Thread.current.thread_variable_set(:bullet_call_object_associations, nil) Thread.current.thread_variable_set(:bullet_possible_objects, nil) Thread.current.thread_variable_set(:bullet_impossible_objects, nil) Thread.current.thread_variable_set(:bullet_inversed_objects, nil) Thread.current.thread_variable_set(:bullet_eager_loadings, nil) Thread.current.thread_variable_set(:bullet_counter_possible_objects, nil) Thread.current.thread_variable_set(:bullet_counter_impossible_objects, nil) end
Source
# File lib/bullet.rb, line 202 def gather_inline_notifications responses = [] for_each_active_notifier_with_notification { |notification| responses << notification.notify_inline } responses.join("\n") end
Source
# File lib/bullet.rb, line 125 def get_safelist_associations(type, class_name) Array.wrap(@safelist[type][class_name]) end
Source
# File lib/bullet.rb, line 262 def inject_into_page? return false if defined?(@skip_html_injection) && @skip_html_injection console_enabled? || add_footer end
Source
# File lib/bullet.rb, line 92 def n_plus_one_query_enable? enable? && (@n_plus_one_query_enable.nil? ? true : @n_plus_one_query_enable) end
Source
# File lib/bullet.rb, line 195 def notification? return unless start? Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations notification_collector.notifications_present? end
Source
# File lib/bullet.rb, line 191 def notification_collector Thread.current.thread_variable_get(:bullet_notification_collector) end
Source
# File lib/bullet.rb, line 208 def perform_out_of_channel_notifications(env = {}) request_uri = build_request_uri(env) for_each_active_notifier_with_notification do |notification| notification.url = request_uri notification.notify_out_of_channel end end
Source
# File lib/bullet.rb, line 238 def profile return_value = nil if Bullet.enable? begin Bullet.start_request return_value = yield Bullet.perform_out_of_channel_notifications if Bullet.notification? ensure Bullet.end_request end else return_value = yield end return_value end
Source
# File lib/bullet.rb, line 56 def raise=(should_raise) UniformNotifier.raise = (should_raise ? Notification::UnoptimizedQueryError : false) end
Source
# File lib/bullet.rb, line 129 def reset_safelist @safelist ||= { n_plus_one_query: {}, unused_eager_loading: {}, counter_cache: {} } end
Source
# File lib/bullet.rb, line 108 def stacktrace_excludes @stacktrace_excludes ||= [] end
Source
# File lib/bullet.rb, line 104 def stacktrace_includes @stacktrace_includes ||= [] end
Source
# File lib/bullet.rb, line 187 def start? enable? && Thread.current.thread_variable_get(:bullet_start) end
Source
# File lib/bullet.rb, line 151 def start_request Thread.current.thread_variable_set(:bullet_start, true) Thread.current.thread_variable_set(:bullet_notification_collector, Bullet::NotificationCollector.new) Thread.current.thread_variable_set(:bullet_object_associations, Bullet::Registry::Base.new) Thread.current.thread_variable_set(:bullet_call_object_associations, Bullet::Registry::Base.new) Thread.current.thread_variable_set(:bullet_possible_objects, Bullet::Registry::Object.new) Thread.current.thread_variable_set(:bullet_impossible_objects, Bullet::Registry::Object.new) Thread.current.thread_variable_set(:bullet_inversed_objects, Bullet::Registry::Base.new) Thread.current.thread_variable_set(:bullet_eager_loadings, Bullet::Registry::Association.new) Thread.current.thread_variable_set(:bullet_call_stacks, Bullet::Registry::CallStack.new) unless Thread.current.thread_variable_get(:bullet_counter_possible_objects) Thread.current.thread_variable_set(:bullet_counter_possible_objects, Bullet::Registry::Object.new) end unless Thread.current.thread_variable_get(:bullet_counter_impossible_objects) Thread.current.thread_variable_set(:bullet_counter_impossible_objects, Bullet::Registry::Object.new) end end
Source
# File lib/bullet.rb, line 222 def text_notifications info = [] notification_collector.collection.each do |notification| info << notification.notification_data.values.compact.join("\n") end info end
Source
# File lib/bullet.rb, line 96 def unused_eager_loading_enable? enable? && (@unused_eager_loading_enable.nil? ? true : @unused_eager_loading_enable) end
Source
# File lib/bullet.rb, line 230 def warnings notification_collector.collection.each_with_object({}) do |notification, warnings| warning_type = notification.class.to_s.split(':').last.tableize warnings[warning_type] ||= [] warnings[warning_type] << notification end end
Private Class Methods
Source
# File lib/bullet.rb, line 279 def build_request_uri(env) return "#{env['REQUEST_METHOD']} #{env['REQUEST_URI']}" if env['REQUEST_URI'] if env['QUERY_STRING'].present? "#{env['REQUEST_METHOD']} #{env['PATH_INFO']}?#{env['QUERY_STRING']}" else "#{env['REQUEST_METHOD']} #{env['PATH_INFO']}" end end
Source
# File lib/bullet.rb, line 270 def for_each_active_notifier_with_notification UniformNotifier.active_notifiers.each do |notifier| notification_collector.collection.each do |notification| notification.notifier = notifier yield notification end end end