coaster 1.4.33 → 1.4.35
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/coaster/core_ext/standard_error/sentry.rb +1 -0
- data/lib/coaster/core_ext/standard_error.rb +39 -25
- data/lib/coaster/version.rb +1 -1
- data/test/test_backtrace.rb +23 -1
- data/test/test_standard_error.rb +3 -3
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5646bbed7603ad57d8d2af90a55addf26d21ec9aa0642bb507755d804aa0813e
|
|
4
|
+
data.tar.gz: 12ba251c73c7e921079d81920bcc2a5d790238b0d2dbeb2cdcd84424a34a14f5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0d0a4cb521f30be23e1a8accc92c5bed621af882538e4582932b8093b6c062ab28c44885e3894840df5c8d0ef8ca21b2a9e6ed0192bf2f55bfc9d1b9c92fc3de
|
|
7
|
+
data.tar.gz: d936c069d58ca5639e290865059b41624c2ba74936244882696effa8d43e7bb60b4d5f37848b1da63168d2cf8867297e7d2668593063c831c5ea038756773a96
|
|
@@ -27,6 +27,7 @@ class StandardError
|
|
|
27
27
|
nt[:tags][:digest_backtrace] = digest_backtrace if digest_backtrace.present?
|
|
28
28
|
nt[:level] ||= self.level
|
|
29
29
|
nt[:extra] = attributes.merge(nt[:extra])
|
|
30
|
+
nt[:extra][:ivars] = to_inspection_ivars rescue {}
|
|
30
31
|
nt[:fingerprint] = sentry_fingerprint
|
|
31
32
|
nt
|
|
32
33
|
end
|
|
@@ -97,7 +97,7 @@ class StandardError
|
|
|
97
97
|
msg = hash.delete(:msg) || msg
|
|
98
98
|
msg = hash.delete(:message) || msg
|
|
99
99
|
hash[:description] ||= hash.delete(:desc) if hash[:desc].present?
|
|
100
|
-
@fingerprint = hash.delete(:fingerprint) || hash.delete(:fingerprints)
|
|
100
|
+
@fingerprint = Array.wrap(hash.delete(:fingerprint) || hash.delete(:fingerprints)) + @fingerprint
|
|
101
101
|
@tags = hash.delete(:tags) || hash.delete(:tag)
|
|
102
102
|
@level = hash.delete(:level) || hash.delete(:severity) || @level
|
|
103
103
|
@tkey = hash.delete(:tkey)
|
|
@@ -128,13 +128,31 @@ class StandardError
|
|
|
128
128
|
|
|
129
129
|
# @return [Array] fingerprint
|
|
130
130
|
def fingerprint
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
131
|
+
if @fingerprint.instance_variable_get(:@__processed__)
|
|
132
|
+
@fingerprint
|
|
133
|
+
else
|
|
134
|
+
@fingerprint = ((@fingerprint || []) + Coaster.default_fingerprint).flatten.compact.map do |fp|
|
|
135
|
+
case fp
|
|
136
|
+
when Symbol then send(fp)
|
|
137
|
+
when Proc then fp.call(self)
|
|
138
|
+
when Numeric then fp
|
|
139
|
+
else fp.to_s
|
|
140
|
+
end
|
|
141
|
+
rescue => e
|
|
142
|
+
@fingerprint_exception = {msg: e.message, bt: e.backtrace ? e.backtrace[0..5] : nil}
|
|
143
|
+
if fp.is_a?(Proc) & fp.source_location
|
|
144
|
+
f = fp.source_location[0].split('/').last(3).join('/')
|
|
145
|
+
"#{f}:#{fp.source_location[1]}"
|
|
146
|
+
else
|
|
147
|
+
fp.to_s
|
|
148
|
+
end
|
|
149
|
+
end.flatten.compact
|
|
150
|
+
@fingerprint.instance_variable_set(:@__processed__, true)
|
|
151
|
+
@fingerprint
|
|
152
|
+
end
|
|
137
153
|
end
|
|
154
|
+
alias_method :rails_tag, :fingerprint
|
|
155
|
+
|
|
138
156
|
def safe_message; message || '' end
|
|
139
157
|
def digest_message; @digest_message ||= self.class.digest_message(message) end
|
|
140
158
|
def digest_backtrace; @digest_backtrace ||= backtrace ? Digest::MD5.hexdigest(cleaned_backtrace.join("\n"))[0...8] : nil end
|
|
@@ -234,14 +252,8 @@ class StandardError
|
|
|
234
252
|
attributes[:inspection_value_proc] || self.class.inspection_value_proc
|
|
235
253
|
end
|
|
236
254
|
|
|
237
|
-
def
|
|
238
|
-
|
|
239
|
-
_h.merge!(
|
|
240
|
-
type: self.class.name, status: status,
|
|
241
|
-
http_status: http_status, message: message,
|
|
242
|
-
instance_variables: {}.with_indifferent_access
|
|
243
|
-
)
|
|
244
|
-
digest_backtrace # for @digest_backtrace
|
|
255
|
+
def to_inspection_ivars
|
|
256
|
+
_h = {instance_variables: {}}.with_indifferent_access
|
|
245
257
|
instance_variables.sort.each do |var|
|
|
246
258
|
if inspection_vars.include?(var)
|
|
247
259
|
val = instance_variable_get(var)
|
|
@@ -254,6 +266,18 @@ class StandardError
|
|
|
254
266
|
_h[:instance_variables][var] = self.class.inspection_value_simple(val)
|
|
255
267
|
end
|
|
256
268
|
end
|
|
269
|
+
_h
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
def to_inspection_hash(options: {}, _h: {}.with_indifferent_access, _depth: 0)
|
|
273
|
+
backtrace_key = options[:backtrace_key] || :backtrace
|
|
274
|
+
_h.merge!(
|
|
275
|
+
type: self.class.name, status: status,
|
|
276
|
+
http_status: http_status, message: message,
|
|
277
|
+
instance_variables: {}.with_indifferent_access
|
|
278
|
+
)
|
|
279
|
+
digest_backtrace # for @digest_backtrace
|
|
280
|
+
_h.merge!(to_inspection_ivars)
|
|
257
281
|
if backtrace.present?
|
|
258
282
|
if respond_to?(:cleaned_backtrace)
|
|
259
283
|
if (bt = cleaned_backtrace(options))
|
|
@@ -305,16 +329,6 @@ class StandardError
|
|
|
305
329
|
end
|
|
306
330
|
alias_method :to_detail, :to_inspection_s
|
|
307
331
|
|
|
308
|
-
def rails_tag
|
|
309
|
-
(fingerprint || Coaster.default_fingerprint).flatten.map do |fp|
|
|
310
|
-
if fp == true || fp == :class
|
|
311
|
-
self.class.name
|
|
312
|
-
else
|
|
313
|
-
fp.to_s
|
|
314
|
-
end
|
|
315
|
-
end.compact
|
|
316
|
-
end
|
|
317
|
-
|
|
318
332
|
def cleaned_backtrace(options = {})
|
|
319
333
|
return unless backtrace
|
|
320
334
|
cl = options[:cleaner] || cleaner
|
data/lib/coaster/version.rb
CHANGED
data/test/test_backtrace.rb
CHANGED
|
@@ -190,7 +190,7 @@ module Coaster
|
|
|
190
190
|
end
|
|
191
191
|
|
|
192
192
|
def test_backtrace_to_keep
|
|
193
|
-
e = ArgumentError.new(m: 'blahasdf', desc: 'qwer')
|
|
193
|
+
e = ArgumentError.new(m: 'blahasdf', desc: 'qwer', fingerprint: 'aaabbb')
|
|
194
194
|
new_e = StandardError.new(e)
|
|
195
195
|
assert_equal new_e.message, e.message
|
|
196
196
|
assert_equal new_e.description, e.description
|
|
@@ -198,6 +198,28 @@ module Coaster
|
|
|
198
198
|
assert_nil e.backtrace
|
|
199
199
|
end
|
|
200
200
|
|
|
201
|
+
def test_fingerprint
|
|
202
|
+
e = ArgumentError.new(m: 'blahasdf', desc: 'qwer', fingerprint: 'aaabbb')
|
|
203
|
+
new_e = StandardError.new(e)
|
|
204
|
+
assert_equal ['aaabbb', e.digest_message], e.fingerprint
|
|
205
|
+
assert_equal ['aaabbb', e.digest_message, new_e.digest_message], new_e.fingerprint
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def test_fingerprint_proc
|
|
209
|
+
e = ArgumentError.new(m: 'blahasdf', desc: 'qwer', fingerprint: proc{|e| e.status})
|
|
210
|
+
new_e = StandardError.new(e)
|
|
211
|
+
assert_equal [999999, e.digest_message], e.fingerprint
|
|
212
|
+
assert_equal [999999, e.digest_message, new_e.digest_message], new_e.fingerprint
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def test_fingerprint_exception
|
|
216
|
+
e = ArgumentError.new(m: 'blahasdf', desc: 'qwer', fingerprint: proc{ raise 'aaaxxx' })
|
|
217
|
+
new_e = StandardError.new(e)
|
|
218
|
+
assert_equal ["coaster/test/test_backtrace.rb:216", e.digest_message], e.fingerprint
|
|
219
|
+
assert_equal ["coaster/test/test_backtrace.rb:216", e.digest_message, new_e.digest_message], new_e.fingerprint
|
|
220
|
+
assert_equal('aaaxxx', e.instance_variable_get(:@fingerprint_exception)[:msg])
|
|
221
|
+
end
|
|
222
|
+
|
|
201
223
|
def test_backtrace_to_keep_as_cause
|
|
202
224
|
raise ArgumentError, m: 'blahasdf', desc: 'qwer'
|
|
203
225
|
rescue => e
|
data/test/test_standard_error.rb
CHANGED
|
@@ -206,7 +206,7 @@ module Coaster
|
|
|
206
206
|
assert_equal "Test sample error (Coaster::TestStandardError::SampleError)", ih['cause']['message']
|
|
207
207
|
assert ih['cause']['instance_variables']['@coaster']
|
|
208
208
|
assert_instance_of Array, ih['cause']['backtrace']
|
|
209
|
-
assert_equal [e.digest_message, e.digest_backtrace], e.sentry_fingerprint
|
|
209
|
+
assert_equal [e.cause.digest_message, e.cause.digest_backtrace, e.digest_message, e.digest_backtrace], e.sentry_fingerprint
|
|
210
210
|
|
|
211
211
|
detail = e.to_inspection_s
|
|
212
212
|
detail_front = <<-LOG
|
|
@@ -216,7 +216,7 @@ module Coaster
|
|
|
216
216
|
@coaster: true
|
|
217
217
|
@digest_backtrace: #{e.digest_backtrace}
|
|
218
218
|
@digest_message: a8c7c1
|
|
219
|
-
@fingerprint:
|
|
219
|
+
@fingerprint: #{e.fingerprint.inspect}
|
|
220
220
|
@ins_var: [\"Coaster::TestStandardError::SampleError\", {\"h\" => 1}]
|
|
221
221
|
@ins_varr: {\"dd\" => true}
|
|
222
222
|
@level: \"error\"
|
|
@@ -233,7 +233,7 @@ CAUSE: [Coaster::TestStandardError::SampleError] status:10
|
|
|
233
233
|
@coaster: true
|
|
234
234
|
@digest_backtrace: #{e.cause.digest_backtrace}
|
|
235
235
|
@digest_message: cbe233
|
|
236
|
-
@fingerprint:
|
|
236
|
+
@fingerprint: #{e.cause.fingerprint.inspect}
|
|
237
237
|
@level: "error"
|
|
238
238
|
@raven: {}
|
|
239
239
|
@tags: {}
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: coaster
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.4.
|
|
4
|
+
version: 1.4.35
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- buzz jung
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 2025-
|
|
10
|
+
date: 2025-11-17 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: oj
|
|
@@ -257,7 +257,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
257
257
|
- !ruby/object:Gem::Version
|
|
258
258
|
version: '0'
|
|
259
259
|
requirements: []
|
|
260
|
-
rubygems_version: 3.6.
|
|
260
|
+
rubygems_version: 3.6.9
|
|
261
261
|
specification_version: 4
|
|
262
262
|
summary: A little convenient feature for standard library
|
|
263
263
|
test_files:
|