coaster 1.4.33 → 1.4.34

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7887f64dcc2cb70d9c03831385a5a2f086157014cef52b69720dde12b1710b74
4
- data.tar.gz: a077cd102255625846b3650a31a70c5205816b3fd89041707e755730cd9335e9
3
+ metadata.gz: c5bdf67ef7ca8a26fb81e31cd731ff5df6782dde4fe4ad61ce3a0d4188eba728
4
+ data.tar.gz: a77b975d74ededc6caf7c74b26230c109907261b92f278bdecefa177d919685a
5
5
  SHA512:
6
- metadata.gz: 55e709122f337152933d49b924b08bdd2b067a7e905bd928a4c0ff35409ed144291f23280882392a65b952b3260155f713996dd11e9baa5d386a2d91d6add4e5
7
- data.tar.gz: 31ef6cd484c46a9ed2919a6bdc5137ea608da84373309b57790a2ac11d8982773a3b3f564cbcbdf1c756adf090c3732021dd90802dd6c9816bdf7d239525ea3a
6
+ metadata.gz: 26d9b5ef51cfa562faadf9268daa80ffb2a0d84b68bc5ff6b84d49b63d4d4c9c42d331f4bc90cd294fc220758f1a41364c25e644d82577a45b8c66bae7af8a3a
7
+ data.tar.gz: 0b441ed0b52264344fe15224e81117d7c8d55ce252b96e65fa7ce7a8be07b950eee1ec475189c1287a2bb9b7861f5417de7d81e21bbe65306822db1445f28a55
@@ -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
- ((@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
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
@@ -305,16 +323,6 @@ class StandardError
305
323
  end
306
324
  alias_method :to_detail, :to_inspection_s
307
325
 
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
326
  def cleaned_backtrace(options = {})
319
327
  return unless backtrace
320
328
  cl = options[:cleaner] || cleaner
@@ -1,3 +1,3 @@
1
1
  module Coaster
2
- VERSION = '1.4.33'
2
+ VERSION = '1.4.34'
3
3
  end
@@ -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
@@ -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.33
4
+ version: 1.4.34
5
5
  platform: ruby
6
6
  authors:
7
7
  - buzz jung
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-10-31 00:00:00.000000000 Z
10
+ date: 2025-11-10 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.7
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: