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 +4 -4
- data/lib/active_record_query_trace/version.rb +1 -1
- data/lib/active_record_query_trace.rb +42 -47
- metadata +16 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9148d2ea96878f6bd1031637db809f39445b393831a397d8e8ecda57bc6a6f86
|
4
|
+
data.tar.gz: db356dff425204012c693c7d9ab17f867d4b1574965ebd966b60ee95b5a540ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4bc0b49b7ab734944ecf2122ec0f97b177a47fa1d6bd810770369edcf63c4ebcb384bd879823cbb2ef7be8301d36ee1b1a5a1b402844a9201888f2482986fd86
|
7
|
+
data.tar.gz: f48e1191fd895a4e297272ce0a72b13c30971cba23724a27fe9ed2996e198c59b977b1d2fb88818c2212d638728c9f5dc8fc09b57737b0c81cfabffebd0280cb
|
@@ -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
|
-
|
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 =
|
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
|
-
|
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:
|
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:
|
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.
|
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.
|
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.
|
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.
|
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: '
|
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
|
-
|
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
|