coaster 1.3.10 → 1.3.13
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.rb +27 -9
- data/lib/coaster/version.rb +1 -1
- data/test/test_backtrace.rb +29 -0
- data/test/test_standard_error.rb +36 -3
- 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: f0e72ea3485bb3e0fe4cf4a1ba46a8b9d15121f88451b616f7135a79b6c69513
|
|
4
|
+
data.tar.gz: 4ea2ff71f70966987d41ee298b06d2b98d94888faf765eb55860a3bc99d042c0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5395ecbe606496812df91dd98fc79ac6917cc0f89bf85bc3e269deeff9a1316ac562a6273e64f403f85c8fd8a865b3b6307bb9764cc6ba8704cb9908f346cb59
|
|
7
|
+
data.tar.gz: ae9094a1c819b49a356014c5bcc218291f4ecbb15e0670d3aaf6af88c4e52a19d2eac0b420118260927268fe01a593fb21e4f383395c0800b70b68cc0d42169b
|
|
@@ -29,6 +29,14 @@ class StandardError
|
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
def user_digests_with!(&block)
|
|
33
|
+
define_method(:user_digests, &block)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def user_digests_with_default!
|
|
37
|
+
define_method(:user_digests) { _user_digests }
|
|
38
|
+
end
|
|
39
|
+
|
|
32
40
|
def before_logging(name, &block)
|
|
33
41
|
@before_logging_blocks ||= {}
|
|
34
42
|
@before_logging_blocks[name] = block
|
|
@@ -55,21 +63,25 @@ class StandardError
|
|
|
55
63
|
@tags = {}
|
|
56
64
|
@level = 'error'
|
|
57
65
|
@attributes = HashWithIndifferentAccess.new
|
|
58
|
-
@attributes.merge!(cause.attributes || {}) if cause && cause.respond_to?(:attributes)
|
|
59
66
|
@tkey = nil
|
|
67
|
+
if cause && cause.is_a?(StandardError)
|
|
68
|
+
@fingerprint = cause.fingerprint.dup
|
|
69
|
+
@tags = cause.tags.dup
|
|
70
|
+
@level = cause.level
|
|
71
|
+
@tkey = cause.tkey
|
|
72
|
+
@attributes = cause.attributes.dup
|
|
73
|
+
end
|
|
60
74
|
|
|
61
75
|
case message
|
|
62
|
-
when Exception
|
|
63
|
-
msg = message
|
|
64
|
-
set_backtrace(message.backtrace)
|
|
65
76
|
when StandardError
|
|
66
|
-
@fingerprint = message.fingerprint
|
|
67
|
-
@tags = message.tags
|
|
77
|
+
@fingerprint = [message.fingerprint, @fingerprint].flatten.compact.uniq
|
|
78
|
+
@tags = @tags.merge(message.tags || {})
|
|
68
79
|
@level = message.level
|
|
69
80
|
@tkey = message.tkey
|
|
70
|
-
@attributes = message.attributes
|
|
81
|
+
@attributes = @attributes.merge(message.attributes || {})
|
|
82
|
+
msg = message
|
|
83
|
+
when Exception
|
|
71
84
|
msg = message
|
|
72
|
-
set_backtrace(message.backtrace)
|
|
73
85
|
when Hash then
|
|
74
86
|
@coaster = true # coaster 확장을 사용한 에러임을 확인할 수 있음.
|
|
75
87
|
hash = message.with_indifferent_access rescue message
|
|
@@ -100,6 +112,11 @@ class StandardError
|
|
|
100
112
|
@tags = {} unless @tags.is_a?(Hash)
|
|
101
113
|
msg = "{#{cause.message}}" if msg.blank? && cause
|
|
102
114
|
super(msg)
|
|
115
|
+
set_backtrace(msg.backtrace) if msg.is_a?(Exception)
|
|
116
|
+
@fingerprint << digest_message
|
|
117
|
+
@fingerprint << digest_backtrace
|
|
118
|
+
@fingerprint.compact!
|
|
119
|
+
self
|
|
103
120
|
end
|
|
104
121
|
|
|
105
122
|
def safe_message; message || '' end
|
|
@@ -111,7 +128,8 @@ class StandardError
|
|
|
111
128
|
@digest_message ||= Digest::MD5.hexdigest(m)[0...6]
|
|
112
129
|
end
|
|
113
130
|
def digest_backtrace; @digest_backtrace ||= backtrace ? Digest::MD5.hexdigest(cleaned_backtrace.join("\n"))[0...8] : nil end
|
|
114
|
-
def
|
|
131
|
+
def _user_digests; "#{[digest_message, digest_backtrace].compact.join(' ')}" end
|
|
132
|
+
alias_method :user_digests, :_user_digests
|
|
115
133
|
def status; self.class.status end
|
|
116
134
|
def before_logging_blocks; self.class.before_logging_blocks end
|
|
117
135
|
def after_logging_blocks; self.class.after_logging_blocks end
|
data/lib/coaster/version.rb
CHANGED
data/test/test_backtrace.rb
CHANGED
|
@@ -178,5 +178,34 @@ module Coaster
|
|
|
178
178
|
end
|
|
179
179
|
end
|
|
180
180
|
end
|
|
181
|
+
|
|
182
|
+
def test_backtrace_to_keep
|
|
183
|
+
e = ArgumentError.new(m: 'blahasdf', desc: 'qwer')
|
|
184
|
+
new_e = StandardError.new(e)
|
|
185
|
+
assert_equal new_e.message, e.message
|
|
186
|
+
assert_equal new_e.description, e.description
|
|
187
|
+
assert_nil new_e.backtrace
|
|
188
|
+
assert_nil e.backtrace
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def test_backtrace_to_keep_as_cause
|
|
192
|
+
raise ArgumentError, m: 'blahasdf', desc: 'qwer'
|
|
193
|
+
rescue => e
|
|
194
|
+
new_e = StandardError.new(e)
|
|
195
|
+
assert_equal new_e.message, e.message
|
|
196
|
+
assert_equal new_e.description, e.description
|
|
197
|
+
assert_equal new_e.backtrace, e.backtrace
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def sample_method_for_sse
|
|
201
|
+
sample_method_for_sse
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def test_system_stack_error
|
|
205
|
+
sample_method_for_sse
|
|
206
|
+
rescue SystemStackError => e
|
|
207
|
+
new_e = StandardError.new(e)
|
|
208
|
+
assert_equal new_e.backtrace, e.backtrace
|
|
209
|
+
end
|
|
181
210
|
end
|
|
182
211
|
end
|
data/test/test_standard_error.rb
CHANGED
|
@@ -199,7 +199,9 @@ module Coaster
|
|
|
199
199
|
MESSAGE: Test example error (Coaster::TestStandardError::ExampleError) cause{Test sample error (Coaster::TestStandardError::SampleError)}
|
|
200
200
|
@attributes: {\"frog\"=>\"rams\", \"wat\"=>\"cha\"}
|
|
201
201
|
@coaster: true
|
|
202
|
-
@
|
|
202
|
+
@digest_backtrace: NilClass
|
|
203
|
+
@digest_message: a8c7c1
|
|
204
|
+
@fingerprint: ["a8c7c1"]
|
|
203
205
|
@ins_var: [\"Coaster::TestStandardError::SampleError\", {\"h\"=>1}]
|
|
204
206
|
@ins_varr: {\"dd\"=>true}
|
|
205
207
|
@level: \"error\"
|
|
@@ -215,7 +217,9 @@ CAUSE: [Coaster::TestStandardError::SampleError] status:10
|
|
|
215
217
|
MESSAGE: Test sample error (Coaster::TestStandardError::SampleError)
|
|
216
218
|
@attributes: {"frog"=>"rams"}
|
|
217
219
|
@coaster: true
|
|
218
|
-
@
|
|
220
|
+
@digest_backtrace: NilClass
|
|
221
|
+
@digest_message: cbe233
|
|
222
|
+
@fingerprint: ["cbe233"]
|
|
219
223
|
@level: "error"
|
|
220
224
|
@raven: {}
|
|
221
225
|
@tags: {}
|
|
@@ -311,7 +315,7 @@ LOG
|
|
|
311
315
|
assert_equal 'NameError', e.to_hash['type']
|
|
312
316
|
assert_equal 999999, e.to_hash['status']
|
|
313
317
|
assert_equal 500, e.to_hash['http_status']
|
|
314
|
-
assert_equal 'standard error translation (a962bd
|
|
318
|
+
assert_equal 'standard error translation (a962bd 3a7cb999)', e.user_message
|
|
315
319
|
assert_match(/undefined local variable or method `aa'/, e.to_hash['message'])
|
|
316
320
|
end
|
|
317
321
|
|
|
@@ -344,5 +348,34 @@ LOG
|
|
|
344
348
|
e = SampleErrorMightHappen.new('fbar')
|
|
345
349
|
assert !e.report?
|
|
346
350
|
end
|
|
351
|
+
|
|
352
|
+
def test_user_message_change
|
|
353
|
+
SampleErrorSub.user_digests_with! do
|
|
354
|
+
message
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
begin
|
|
358
|
+
raise SampleError, 'asdff'
|
|
359
|
+
rescue => e
|
|
360
|
+
assert_equal e.user_message, 'Test sample error (0dba9e f0fa4c35)'
|
|
361
|
+
end
|
|
362
|
+
begin
|
|
363
|
+
raise SampleErrorSub, 'asdff'
|
|
364
|
+
rescue => e
|
|
365
|
+
assert_equal e.user_message, 'Test sample error (asdff)'
|
|
366
|
+
end
|
|
367
|
+
begin
|
|
368
|
+
raise SampleErrorSubSub, 'asdff'
|
|
369
|
+
rescue => e
|
|
370
|
+
assert_equal e.user_message, 'Test sample error (asdff)'
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
SampleErrorSubSub.user_digests_with_default!
|
|
374
|
+
begin
|
|
375
|
+
raise SampleErrorSubSub, 'asdff'
|
|
376
|
+
rescue => e
|
|
377
|
+
assert_equal e.user_message, 'Test sample error (58ee3f 3d0f84b9)'
|
|
378
|
+
end
|
|
379
|
+
end
|
|
347
380
|
end
|
|
348
381
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: coaster
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.3.
|
|
4
|
+
version: 1.3.13
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- buzz jung
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-07-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: i18n
|