Class: NPlusOneControl::Executor::Collector
- Inherits:
-
Object
- Object
- NPlusOneControl::Executor::Collector
- Defined in:
- lib/n_plus_one_control/executor.rb
Overview
Subscribes to ActiveSupport notifications and collect matching queries.
Instance Method Summary collapse
- #call ⇒ Object
-
#callback(_name, _start, _finish, _message_id, values) ⇒ Object
rubocop:disable Metrics/CyclomaticComplexity,Metrics/LineLength.
-
#initialize(pattern) ⇒ Collector
constructor
A new instance of Collector.
Constructor Details
#initialize(pattern) ⇒ Collector
Returns a new instance of Collector.
9 10 11 |
# File 'lib/n_plus_one_control/executor.rb', line 9 def initialize(pattern) @pattern = pattern end |
Instance Method Details
#call ⇒ Object
13 14 15 16 17 18 19 20 |
# File 'lib/n_plus_one_control/executor.rb', line 13 def call @queries = [] ActiveSupport::Notifications .subscribed(method(:callback), NPlusOneControl.event) do yield end @queries end |
#callback(_name, _start, _finish, _message_id, values) ⇒ Object
rubocop:disable Metrics/CyclomaticComplexity,Metrics/LineLength
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/n_plus_one_control/executor.rb', line 22 def callback(_name, _start, _finish, , values) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/LineLength return if %w[CACHE SCHEMA].include? values[:name] return if values[:sql].match?(NPlusOneControl.ignore) return unless @pattern.nil? || (values[:sql] =~ @pattern) query = values[:sql] if NPlusOneControl.backtrace_cleaner && NPlusOneControl.verbose source = extract_query_source_location(caller) query = "#{query}\n ↳ #{source.join("\n")}" unless source.empty? end @queries << query end |