active_record_query_trace 1.7 → 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: 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