coaster 1.4.31 → 1.4.32
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 +6 -15
- data/lib/coaster/core_ext/standard_error.rb +10 -6
- data/lib/coaster/version.rb +1 -1
- data/lib/coaster.rb +1 -1
- data/test/test_helper.rb +2 -1
- data/test/test_standard_error.rb +6 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4729b9b764d1dec252c0c332a5246f92766c4db32561978be60d53fc896d5b0
|
4
|
+
data.tar.gz: aeb6dbb4a55d9f7d5c7e5d5fc40df951d884da76d91ce63fda4d31626797dd00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4ab283e7934e1ddfbfa3e746727fcabb99f631c210025d1337481fdddc7bf882188f62d7e52c5f924dbf12cb394dc336348aa0fdea82185f975ad4a01abe720
|
7
|
+
data.tar.gz: b625d0a668313c3226fbc5667b2df2fbff9ec8e7ac752b4b152dba7808e2cd08b051ef60b9a75f4baba4a025c1733fd4578134b90c8a380493cdc447aaae4659
|
@@ -12,17 +12,8 @@ class StandardError
|
|
12
12
|
@raven ||= {}.with_indifferent_access
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
if fp == true || fp == :class
|
18
|
-
self.class.name
|
19
|
-
elsif fp == :default
|
20
|
-
'{{ default }}'
|
21
|
-
else
|
22
|
-
fp
|
23
|
-
end
|
24
|
-
end.flatten
|
25
|
-
end
|
15
|
+
alias_method :sentry_fingerprint, :fingerprint
|
16
|
+
alias_method :raven_fingerprint, :fingerprint
|
26
17
|
|
27
18
|
def notes(options = {})
|
28
19
|
opts = options ? options.dup : {}
|
@@ -36,6 +27,7 @@ class StandardError
|
|
36
27
|
nt[:tags][:digest_backtrace] = digest_backtrace if digest_backtrace.present?
|
37
28
|
nt[:level] ||= self.level
|
38
29
|
nt[:extra] = attributes.merge(nt[:extra])
|
30
|
+
nt[:fingerprint] = sentry_fingerprint
|
39
31
|
nt
|
40
32
|
end
|
41
33
|
|
@@ -47,12 +39,11 @@ class StandardError
|
|
47
39
|
scope.user.merge!(nt[:user] || {})
|
48
40
|
scope.tags.merge!(nt[:tags])
|
49
41
|
scope.extra.merge!(nt[:extra])
|
50
|
-
scope.set_fingerprint(
|
42
|
+
scope.set_fingerprint(nt[:fingerprint])
|
51
43
|
end
|
52
44
|
rescue => e
|
53
|
-
|
54
|
-
|
55
|
-
Sentry.logger.error(msg)
|
45
|
+
Sentry.capture_exception(e)
|
46
|
+
@sentry_event = Sentry.capture_exception(self)
|
56
47
|
end
|
57
48
|
|
58
49
|
def sentry_event_id
|
@@ -122,13 +122,19 @@ class StandardError
|
|
122
122
|
super(msg)
|
123
123
|
@digest_message = self.class.digest_message(msg)
|
124
124
|
set_backtrace(message.backtrace) if message.is_a?(Exception)
|
125
|
-
@fingerprint << @digest_message
|
126
125
|
@fingerprint.compact!
|
127
126
|
self
|
128
127
|
end
|
129
128
|
|
130
|
-
# @return [Array
|
131
|
-
def fingerprint
|
129
|
+
# @return [Array] fingerprint
|
130
|
+
def fingerprint
|
131
|
+
(@fingerprint + Coaster.default_fingerprint).flatten.compact.map do |fp|
|
132
|
+
case fp
|
133
|
+
when *%i[digest_message digest_backtrace] then send(fp)
|
134
|
+
else fp.to_s
|
135
|
+
end
|
136
|
+
end.flatten.compact
|
137
|
+
end
|
132
138
|
def safe_message; message || '' end
|
133
139
|
def digest_message; @digest_message ||= self.class.digest_message(message) end
|
134
140
|
def digest_backtrace; @digest_backtrace ||= backtrace ? Digest::MD5.hexdigest(cleaned_backtrace.join("\n"))[0...8] : nil end
|
@@ -303,10 +309,8 @@ class StandardError
|
|
303
309
|
(fingerprint || Coaster.default_fingerprint).flatten.map do |fp|
|
304
310
|
if fp == true || fp == :class
|
305
311
|
self.class.name
|
306
|
-
elsif fp == :default || fp == '{{ default }}'
|
307
|
-
nil
|
308
312
|
else
|
309
|
-
fp
|
313
|
+
fp.to_s
|
310
314
|
end
|
311
315
|
end.compact
|
312
316
|
end
|
data/lib/coaster/version.rb
CHANGED
data/lib/coaster.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
ENV['DEBUG'] = 'true'
|
2
2
|
|
3
|
+
require 'debug'
|
3
4
|
require 'minitest'
|
4
5
|
require 'pry'
|
5
|
-
require 'pry-byebug'
|
6
6
|
require 'pry-stack_explorer'
|
7
7
|
|
8
8
|
require 'rubygems'
|
@@ -23,3 +23,4 @@ end
|
|
23
23
|
|
24
24
|
Coaster.logger = Logger.new(STDOUT)
|
25
25
|
Coaster.logger.level = Logger::WARN
|
26
|
+
Coaster.default_fingerprint = %i[digest_message digest_backtrace]
|
data/test/test_standard_error.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
require 'minitest/autorun'
|
3
|
-
require 'coaster/core_ext/standard_error/
|
3
|
+
require 'coaster/core_ext/standard_error/sentry'
|
4
4
|
|
5
5
|
StandardError.inspection_value_proc = Proc.new do |val|
|
6
6
|
PP.pp(val, ''.dup, 79)[0...-1]
|
@@ -206,6 +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
210
|
|
210
211
|
detail = e.to_inspection_s
|
211
212
|
detail_front = <<-LOG
|
@@ -215,7 +216,7 @@ module Coaster
|
|
215
216
|
@coaster: true
|
216
217
|
@digest_backtrace: #{e.digest_backtrace}
|
217
218
|
@digest_message: a8c7c1
|
218
|
-
@fingerprint: [
|
219
|
+
@fingerprint: []
|
219
220
|
@ins_var: [\"Coaster::TestStandardError::SampleError\", {\"h\" => 1}]
|
220
221
|
@ins_varr: {\"dd\" => true}
|
221
222
|
@level: \"error\"
|
@@ -232,7 +233,7 @@ CAUSE: [Coaster::TestStandardError::SampleError] status:10
|
|
232
233
|
@coaster: true
|
233
234
|
@digest_backtrace: #{e.cause.digest_backtrace}
|
234
235
|
@digest_message: cbe233
|
235
|
-
@fingerprint: [
|
236
|
+
@fingerprint: []
|
236
237
|
@level: "error"
|
237
238
|
@raven: {}
|
238
239
|
@tags: {}
|
@@ -240,10 +241,10 @@ CAUSE: [Coaster::TestStandardError::SampleError] status:10
|
|
240
241
|
BACKTRACE:
|
241
242
|
#{__FILE__}:188:in 'Coaster::TestStandardError#test_to_detail'
|
242
243
|
LOG
|
243
|
-
|
244
|
+
assert_match(/^#{Regexp.escape(detail_front)}/, detail)
|
244
245
|
cause_ix = (detail =~ /CAUSE/)
|
245
246
|
cause = detail[cause_ix..-1]
|
246
|
-
|
247
|
+
assert_match(/^#{Regexp.escape(detail_cause_front)}/, cause)
|
247
248
|
end
|
248
249
|
|
249
250
|
def test_to_detail_with_depth
|
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.32
|
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-10-16 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: oj
|