salopulse 0.5.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cc7bf7f198d439d42f261e8bdc3dd4047db5184dfebb3fc8db4b9b5a447e90a7
4
- data.tar.gz: 5c97cb6e8117811a8c0f10b67b088e755f250830bc627bd2a4a686cf179a66b7
3
+ metadata.gz: 6a3be5e90db8f8e98976af2f1aaaf07732f88de00a852096275962a1f8a90077
4
+ data.tar.gz: c7ae1840db9c1b3f66366e9334b7f97896b198c4e7480b62b3565a0c7f0afcf8
5
5
  SHA512:
6
- metadata.gz: 66f824d471a449b8addb8d8d72454cb6317a49abb05a0d4ea39bd90cf834809fa1b82a8887b63d8ca42324502d0295505c7135e85bc793921647b04b1e9af3af
7
- data.tar.gz: 0411bebdccca31b8986fda4aabb515286bceb06816b9f3916b71d4d607846f8885ef21c56cb77d46e971c477dbba8e13c0732bf0a40927fc11517852ee958971
6
+ metadata.gz: cc65caad7ec8c6a44534f6564cdf1b6385370b1f9978792ac7b9c72847367f8e7e8b25d7c383adac10285dccb9826f7388f3681d9c1f71a9950520ed3ca1142f
7
+ data.tar.gz: 9c555b3d28c2a862efac4fe7880dc83bf9de2bb8f4878f34828b81697b6def808d43ec05fef023dc4d44fdea8d722ebcb9ff0cc679e6e4488ea3e924e7f8ba8f
data/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
4
4
 
5
+ ## [0.5.1] - 2026-06-10
6
+
7
+ ### Changed
8
+ - `StackFrameBuilder` now dedupes consecutive frames that share the same
9
+ `(file, line)` pair, keeping the outer frame. Ruby 3.3+ enhanced
10
+ backtraces emit a separate frame for the raising operator (e.g.
11
+ `'/'`) on the same line as the calling method (e.g. `'divide_by_zero'`);
12
+ the dashboard previously rendered two cards with identical source
13
+ context. The kept frame's method name is the more descriptive caller
14
+
5
15
  ## [0.5.0] - 2026-06-10
6
16
 
7
17
  ### Added
@@ -19,11 +19,23 @@ module Salopulse
19
19
  end
20
20
 
21
21
  def call
22
- @backtrace.first(MAX_FRAMES).filter_map { |line| build_frame(line.to_s) }
22
+ frames = @backtrace.first(MAX_FRAMES).filter_map { |line| build_frame(line.to_s) }
23
+ dedupe_consecutive(frames)
23
24
  end
24
25
 
25
26
  private
26
27
 
28
+ def dedupe_consecutive(frames)
29
+ frames.each_with_object([]) do |frame, acc|
30
+ previous = acc.last
31
+ if previous && previous["abs_path"] == frame["abs_path"] && previous["line"] == frame["line"]
32
+ acc[-1] = frame
33
+ else
34
+ acc << frame
35
+ end
36
+ end
37
+ end
38
+
27
39
  def build_frame(raw)
28
40
  match = BACKTRACE_LINE.match(raw)
29
41
  return nil unless match
@@ -1,3 +1,3 @@
1
1
  module Salopulse
2
- VERSION = "0.5.0".freeze
2
+ VERSION = "0.5.1".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: salopulse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Salih İmran Büker