active_record_query_trace 1.7 → 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: 3b9863216a6d3587bfe68f4aeee1213e6f1e16475045e20231fac8870f996ccb
4
- data.tar.gz: 43a7bd0611953022e35f1909deefb395d35c2c1b2349a49eb5270b0c74566d83
3
+ metadata.gz: 9148d2ea96878f6bd1031637db809f39445b393831a397d8e8ecda57bc6a6f86
4
+ data.tar.gz: db356dff425204012c693c7d9ab17f867d4b1574965ebd966b60ee95b5a540ab
5
5
  SHA512:
6
- metadata.gz: 9936bc3e438c24fc1d652c8710b8f9e82b485ab26f1189ec45667015bc96fa88d7256bd6259247df65b8f81b70eb6b8a0f719027edff01a6626b6fe7c9972d92
7
- data.tar.gz: 90568c7a20aa1c64a2465efea7a9769119d5999c2a7bdf01ea785375e3ddc5445132607d0dfe0d0e693b6811e1c8782060270571cc5ef882094073d16ef30a8b
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.7'
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
@@ -76,7 +111,6 @@ module ActiveRecordQueryTrace
76
111
  payload[:cached] || payload[:name] == 'CACHE'
77
112
  end
78
113
 
79
- # rubocop:disable Metrics/CyclomaticComplexity
80
114
  # TODO: refactor and remove rubocop:disable comments.
81
115
  def display_backtrace?(payload)
82
116
  ActiveRecordQueryTrace.enabled \
@@ -86,7 +120,6 @@ module ActiveRecordQueryTrace
86
120
  && !(ActiveRecordQueryTrace.suppress_logging_of_db_reads && db_read_query?(payload)) \
87
121
  && display_backtrace_for_query_type?(payload)
88
122
  end
89
- # rubocop:enable Metrics/CyclomaticComplexity
90
123
 
91
124
  def display_backtrace_for_query_type?(payload)
92
125
  case ActiveRecordQueryTrace.query_type
@@ -129,7 +162,7 @@ module ActiveRecordQueryTrace
129
162
  when :full
130
163
  trace = full_trace
131
164
  when :app, :rails
132
- trace = Rails.backtrace_cleaner.clean(full_trace)
165
+ trace = default_cleaner.clean(full_trace)
133
166
  when :custom
134
167
  unless ActiveRecordQueryTrace.backtrace_cleaner
135
168
  raise 'Configure your backtrace cleaner first via ActiveRecordQueryTrace.backtrace_cleaner = MyCleaner'
@@ -137,7 +170,7 @@ module ActiveRecordQueryTrace
137
170
  trace = ActiveRecordQueryTrace.backtrace_cleaner.call(full_trace)
138
171
  else
139
172
  raise 'Invalid ActiveRecordQueryTrace.level value ' \
140
- "#{ActiveRecordQueryTrace.level}. Should be :full, :rails, or :app."
173
+ "#{ActiveRecordQueryTrace.level}. Should be :full, :rails, or :app."
141
174
  end
142
175
 
143
176
  # We cant use a Rails::BacktraceCleaner filter to display only the relative
@@ -147,38 +180,6 @@ module ActiveRecordQueryTrace
147
180
  end
148
181
  # rubocop:enable Metrics/MethodLength
149
182
 
150
- # Rails by default silences all backtraces that *do not* match
151
- # Rails::BacktraceCleaner::APP_DIRS_PATTERN. In other words, the default
152
- # silencer filters out all framework backtrace lines, leaving only the
153
- # application lines.
154
- def setup_backtrace_cleaner
155
- setup_backtrace_cleaner_path
156
- return if ActiveRecordQueryTrace.level == :full
157
-
158
- remove_filters_and_silencers
159
-
160
- case ActiveRecordQueryTrace.level
161
- when :app
162
- Rails.backtrace_cleaner.add_silencer { |line| line !~ rails_root_regexp }
163
- when :rails
164
- Rails.backtrace_cleaner.add_silencer { |line| line =~ rails_root_regexp }
165
- end
166
- end
167
-
168
- # Rails relies on backtrace cleaner to set the application root directory
169
- # filter. The problem is that the backtrace cleaner is initialized before
170
- # this gem. This ensures that the value of `root` used by the filter
171
- # is correct.
172
- def setup_backtrace_cleaner_path
173
- return unless Rails.backtrace_cleaner.instance_variable_get(:@root) == '/'
174
- Rails.backtrace_cleaner.instance_variable_set :@root, Rails.root.to_s
175
- end
176
-
177
- def remove_filters_and_silencers
178
- Rails.backtrace_cleaner.remove_filters!
179
- Rails.backtrace_cleaner.remove_silencers!
180
- end
181
-
182
183
  # Allow query to be colorized in the terminal
183
184
  def colorize_text(text)
184
185
  return text unless ActiveRecordQueryTrace.colorize
@@ -217,12 +218,6 @@ module ActiveRecordQueryTrace
217
218
  def rails_root_prefix
218
219
  @rails_root_prefix ||= "#{Rails.root}/"
219
220
  end
220
-
221
- # This cannot be set in a constant as Rails.root is not yet available when
222
- # this file is loaded.
223
- def rails_root_regexp
224
- @rails_root_regexp ||= %r{#{Regexp.escape(Rails.root.to_s)}(?!\/vendor)}
225
- end
226
221
  end
227
222
  end
228
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.7'
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: 2019-10-21 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
@@ -29,30 +29,30 @@ dependencies:
29
29
  name: pry
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ">="
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: 0.12.2
34
+ version: 0.13.0
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ">="
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: 0.12.2
41
+ version: 0.13.0
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: pry-byebug
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ">="
46
+ - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 3.7.0
48
+ version: 3.9.0
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ">="
53
+ - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: 3.7.0
55
+ version: 3.9.0
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rspec
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -142,17 +142,19 @@ require_paths:
142
142
  - lib
143
143
  required_ruby_version: !ruby/object:Gem::Requirement
144
144
  requirements:
145
- - - "~>"
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '2.4'
148
+ - - "<"
146
149
  - !ruby/object:Gem::Version
147
- version: '2.3'
150
+ version: '4.0'
148
151
  required_rubygems_version: !ruby/object:Gem::Requirement
149
152
  requirements:
150
153
  - - ">="
151
154
  - !ruby/object:Gem::Version
152
155
  version: '0'
153
156
  requirements: []
154
- rubyforge_project:
155
- rubygems_version: 2.7.8
157
+ rubygems_version: 3.3.3
156
158
  signing_key:
157
159
  specification_version: 4
158
160
  summary: Print stack trace of all DB queries to the Rails log. Helpful to find where