active_record_query_trace 1.8 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06d7497a2165d922974efd1ffc10bf6b6725d1c4705f9b5d5464affca6db069e
4
- data.tar.gz: 1d5bf04f35d74b69cddc657d9f91795c315ce4b50422cc79aa06843a0299d3e9
3
+ metadata.gz: 9148d2ea96878f6bd1031637db809f39445b393831a397d8e8ecda57bc6a6f86
4
+ data.tar.gz: db356dff425204012c693c7d9ab17f867d4b1574965ebd966b60ee95b5a540ab
5
5
  SHA512:
6
- metadata.gz: '09cd3daa1e090acc6e8bafd776c28c3df40f190baccd3799e5b93629a416f890ce4b4514993842830159840fe8d688ef71ba45f54893c62cf053b045c8dd978f'
7
- data.tar.gz: d53226b99e6eae63ea2b79abf5db75f4f04c546773dc61fda88962d9de2b4c465f84c3af6481b3778d0410e3c4ed07433b29ba29eba5d4481c04efe9d836118c
6
+ metadata.gz: 4bc0b49b7ab734944ecf2122ec0f97b177a47fa1d6bd810770369edcf63c4ebcb384bd879823cbb2ef7be8301d36ee1b1a5a1b402844a9201888f2482986fd86
7
+ data.tar.gz: f48e1191fd895a4e297272ce0a72b13c30971cba23724a27fe9ed2996e198c59b977b1d2fb88818c2212d638728c9f5dc8fc09b57737b0c81cfabffebd0280cb
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveRecordQueryTrace
4
- VERSION = '1.8'
4
+ VERSION = '1.8.1'
5
5
  end
@@ -27,13 +27,13 @@ module ActiveRecordQueryTrace
27
27
 
28
28
  class << self
29
29
  attr_accessor :enabled
30
- attr_accessor :level
31
30
  attr_accessor :lines
32
31
  attr_accessor :ignore_cached_queries
33
32
  attr_accessor :colorize
34
33
  attr_accessor :query_type
35
34
  attr_accessor :suppress_logging_of_db_reads
36
- attr_reader :backtrace_cleaner
35
+ attr_writer :default_cleaner
36
+ attr_reader :backtrace_cleaner, :level
37
37
 
38
38
  def backtrace_cleaner=(cleaner)
39
39
  @backtrace_cleaner =
@@ -43,6 +43,42 @@ module ActiveRecordQueryTrace
43
43
  proc { |trace| cleaner.clean(trace) }
44
44
  end
45
45
  end
46
+
47
+ # When changing the level we need to reset the backtrace cleaner used
48
+ def level=(level)
49
+ @level = level
50
+ @default_cleaner = nil
51
+ end
52
+
53
+ def default_cleaner
54
+ @default_cleaner ||= setup_backtrace_cleaner
55
+ end
56
+
57
+ # The following code creates a brand new BacktraceCleaner just for the use of this Gem
58
+ # avoiding the dealing with Rails.backtrace_cleaner
59
+ def setup_backtrace_cleaner
60
+ cleaner = Rails::BacktraceCleaner.new
61
+ remove_filters_and_silencers cleaner
62
+ cleaner.instance_variable_set :@root, Rails.root.to_s if cleaner.instance_variable_get(:@root) == '/'
63
+ case ActiveRecordQueryTrace.level
64
+ when :app
65
+ cleaner.add_silencer { |line| line !~ rails_root_regexp }
66
+ when :rails
67
+ cleaner.add_silencer { |line| line =~ rails_root_regexp }
68
+ end
69
+ cleaner
70
+ end
71
+
72
+ def remove_filters_and_silencers(cleaner)
73
+ cleaner.remove_filters!
74
+ cleaner.remove_silencers!
75
+ end
76
+
77
+ # This cannot be set in a constant as Rails.root is not yet available when
78
+ # this file is loaded.
79
+ def rails_root_regexp
80
+ @rails_root_regexp ||= %r{#{Regexp.escape(Rails.root.to_s)}(?!\/vendor)}
81
+ end
46
82
  end
47
83
 
48
84
  class CustomLogSubscriber < ActiveRecord::LogSubscriber # rubocop:disable Metrics/ClassLength
@@ -60,13 +96,12 @@ module ActiveRecordQueryTrace
60
96
  def sql(event)
61
97
  payload = event.payload
62
98
  return unless display_backtrace?(payload)
63
-
64
- setup_backtrace_cleaner unless ActiveRecordQueryTrace.backtrace_cleaner
65
-
66
99
  trace = fully_formatted_trace # Memoize
67
100
  debug(trace) unless trace.blank?
68
101
  end
69
102
 
103
+ delegate :default_cleaner, to: ActiveRecordQueryTrace
104
+
70
105
  attach_to :active_record
71
106
 
72
107
  private
@@ -127,7 +162,7 @@ module ActiveRecordQueryTrace
127
162
  when :full
128
163
  trace = full_trace
129
164
  when :app, :rails
130
- trace = Rails.backtrace_cleaner.clean(full_trace)
165
+ trace = default_cleaner.clean(full_trace)
131
166
  when :custom
132
167
  unless ActiveRecordQueryTrace.backtrace_cleaner
133
168
  raise 'Configure your backtrace cleaner first via ActiveRecordQueryTrace.backtrace_cleaner = MyCleaner'
@@ -135,7 +170,7 @@ module ActiveRecordQueryTrace
135
170
  trace = ActiveRecordQueryTrace.backtrace_cleaner.call(full_trace)
136
171
  else
137
172
  raise 'Invalid ActiveRecordQueryTrace.level value ' \
138
- "#{ActiveRecordQueryTrace.level}. Should be :full, :rails, or :app."
173
+ "#{ActiveRecordQueryTrace.level}. Should be :full, :rails, or :app."
139
174
  end
140
175
 
141
176
  # We cant use a Rails::BacktraceCleaner filter to display only the relative
@@ -145,38 +180,6 @@ module ActiveRecordQueryTrace
145
180
  end
146
181
  # rubocop:enable Metrics/MethodLength
147
182
 
148
- # Rails by default silences all backtraces that *do not* match
149
- # Rails::BacktraceCleaner::APP_DIRS_PATTERN. In other words, the default
150
- # silencer filters out all framework backtrace lines, leaving only the
151
- # application lines.
152
- def setup_backtrace_cleaner
153
- setup_backtrace_cleaner_path
154
- return if ActiveRecordQueryTrace.level == :full
155
-
156
- remove_filters_and_silencers
157
-
158
- case ActiveRecordQueryTrace.level
159
- when :app
160
- Rails.backtrace_cleaner.add_silencer { |line| line !~ rails_root_regexp }
161
- when :rails
162
- Rails.backtrace_cleaner.add_silencer { |line| line =~ rails_root_regexp }
163
- end
164
- end
165
-
166
- # Rails relies on backtrace cleaner to set the application root directory
167
- # filter. The problem is that the backtrace cleaner is initialized before
168
- # this gem. This ensures that the value of `root` used by the filter
169
- # is correct.
170
- def setup_backtrace_cleaner_path
171
- return unless Rails.backtrace_cleaner.instance_variable_get(:@root) == '/'
172
- Rails.backtrace_cleaner.instance_variable_set :@root, Rails.root.to_s
173
- end
174
-
175
- def remove_filters_and_silencers
176
- Rails.backtrace_cleaner.remove_filters!
177
- Rails.backtrace_cleaner.remove_silencers!
178
- end
179
-
180
183
  # Allow query to be colorized in the terminal
181
184
  def colorize_text(text)
182
185
  return text unless ActiveRecordQueryTrace.colorize
@@ -215,12 +218,6 @@ module ActiveRecordQueryTrace
215
218
  def rails_root_prefix
216
219
  @rails_root_prefix ||= "#{Rails.root}/"
217
220
  end
218
-
219
- # This cannot be set in a constant as Rails.root is not yet available when
220
- # this file is loaded.
221
- def rails_root_regexp
222
- @rails_root_regexp ||= %r{#{Regexp.escape(Rails.root.to_s)}(?!\/vendor)}
223
- end
224
221
  end
225
222
  end
226
223
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_query_trace
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.8'
4
+ version: 1.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Caughlan
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-10-13 00:00:00.000000000 Z
12
+ date: 2023-07-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -154,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
154
  - !ruby/object:Gem::Version
155
155
  version: '0'
156
156
  requirements: []
157
- rubygems_version: 3.0.6
157
+ rubygems_version: 3.3.3
158
158
  signing_key:
159
159
  specification_version: 4
160
160
  summary: Print stack trace of all DB queries to the Rails log. Helpful to find where