active_record_query_trace 1.8 → 1.8.1

Sign up to get free protection for your applications and to get access to all the features.
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