peak_flow_utils 0.1.24 → 0.1.27

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: '09b4cc6c4746170bc4be78f58c447be7c24fb98fe4ab2616c1efe5e3199021be'
4
- data.tar.gz: 9046266b37ad81f316ff7ea2b87c21518ad575dc12b62b0a4dc172cbf5e9775d
3
+ metadata.gz: d3e98cbd0f73efee4f3fe4bb4402c959359be3f711d935e9060f86f20ebae56f
4
+ data.tar.gz: e63aa1314f76a6b3eca83356275f9a8d5e635977baf56ea7bdb488b5c087dfcd
5
5
  SHA512:
6
- metadata.gz: eabf75ca1e26aedf3b2e4a22e56513317a12160757f284ce80c8f65d54dd7cb41f9515616a9a1a07453eb99cf6457d2b5e17c5e9f0cf171ba6d850c209ddf34a
7
- data.tar.gz: 752b031ddbe701f07a7360ee5342fe28ebf71b2d6aa3b9b0ea4b1c695766a1fbc8e529452c67c6367e0ff616d3ddaee0b96269e5c1da4eef989de836c2291557
6
+ metadata.gz: 3c48c62df3d0432f2e37cd1f02b6f314b5c7f3bbfebf6409a0ce607aba86b93fc858b0b42767d62519a627c9c2241c181e80b6582eb9e7925f28bd3525f439f8
7
+ data.tar.gz: 75df8dd79b7db0614f70bd90627d93c80b9ff1814425af09e83f0318e853d95d29bba6c5d80b31c460ecb68e52ec120b0fcca01ca0016bfd6eeaefc30be4b61e
data/README.md CHANGED
@@ -32,6 +32,8 @@ PeakFlowUtils::Notifier.configure(auth_token: "your-token")
32
32
  PeakFlowUtils::Notifier.notify(error: error)
33
33
  ```
34
34
 
35
+ Errors that escape a `PeakFlowUtils::Notifier.with_parameters` block keep a snapshot of the scoped parameters. Later framework handlers, such as Sidekiq error handlers, can report the same error after the block has unwound and still include the captured context.
36
+
35
37
  ### Reporting Rails errors
36
38
 
37
39
  Add this to `config/peakflow.rb`:
@@ -2,6 +2,6 @@ require "rails"
2
2
 
3
3
  module PeakFlowUtils; end
4
4
 
5
- class PeakFlowUtils::Engine < Rails::Engine
5
+ class PeakFlowUtils::Engine < Rails::Engine # rubocop:disable Style/OneClassPerFile
6
6
  isolate_namespace PeakFlowUtils
7
7
  end
@@ -49,7 +49,9 @@ Thread.class_eval do
49
49
 
50
50
  def self.inherited_local_vars_set(values)
51
51
  inherited_local_vars_mutex.synchronize do
52
- _inherited_local_vars.merge!(values)
52
+ current_vars = _inherited_local_vars
53
+ new_vars = PeakFlowUtils::DeepMerger.execute!(hashes: [current_vars, values])
54
+ Thread.current.instance_variable_set(:@_inherited_local_vars, new_vars)
53
55
  end
54
56
  end
55
57
  end
@@ -3,6 +3,8 @@ class PeakFlowUtils::Notifier
3
3
  class NotConfiguredError < RuntimeError; end
4
4
  class NotifyMessageError < RuntimeError; end
5
5
 
6
+ CAPTURED_PARAMETERS_INSTANCE_VARIABLE = :@peak_flow_utils_captured_parameters
7
+
6
8
  attr_reader :auth_token, :mutex, :parameters
7
9
 
8
10
  def self.configure(auth_token:)
@@ -37,22 +39,21 @@ class PeakFlowUtils::Notifier
37
39
  random_id = ::SecureRandom.hex(16)
38
40
 
39
41
  ::PeakFlowUtils::Notifier.current.mutex.synchronize do
40
- raise "'parameters' was nil?" if ::PeakFlowUtils::Notifier.current.parameters.value.nil?
41
-
42
- parameters_with = ::PeakFlowUtils::Notifier.current.parameters.value.clone
43
- parameters_with[random_id] = parameters
42
+ current_parameters = ::PeakFlowUtils::Notifier.current.parameters.value
43
+ raise "'parameters' was nil?" if current_parameters.nil?
44
44
 
45
- ::PeakFlowUtils::Notifier.current.parameters.value = parameters_with
45
+ current_parameters[random_id] = parameters
46
46
  end
47
47
 
48
48
  begin
49
49
  yield
50
+ rescue StandardError => e
51
+ ::PeakFlowUtils::Notifier.current.capture_parameters_for_error(e)
52
+ raise
50
53
  ensure
51
54
  ::PeakFlowUtils::Notifier.current.mutex.synchronize do
52
- parameters_without = ::PeakFlowUtils::Notifier.current.parameters.value.clone
53
- parameters_without.delete(random_id)
54
-
55
- ::PeakFlowUtils::Notifier.current.parameters.value = parameters_without
55
+ current_parameters = ::PeakFlowUtils::Notifier.current.parameters.value
56
+ current_parameters.delete(random_id)
56
57
  end
57
58
  end
58
59
  end
@@ -64,8 +65,22 @@ class PeakFlowUtils::Notifier
64
65
  @parameters = ::PeakFlowUtils::InheritedLocalVar.new({})
65
66
  end
66
67
 
67
- def current_parameters(parameters: nil)
68
+ def capture_parameters_for_error(error)
69
+ return if error.instance_variable_defined?(CAPTURED_PARAMETERS_INSTANCE_VARIABLE)
70
+
71
+ error.instance_variable_set(CAPTURED_PARAMETERS_INSTANCE_VARIABLE, current_parameters)
72
+ end
73
+
74
+ def captured_parameters_for_error(error)
75
+ return unless error&.instance_variable_defined?(CAPTURED_PARAMETERS_INSTANCE_VARIABLE)
76
+
77
+ error.instance_variable_get(CAPTURED_PARAMETERS_INSTANCE_VARIABLE)
78
+ end
79
+
80
+ def current_parameters(error: nil, parameters: nil)
68
81
  hashes = current_parameters_hashes
82
+ captured_parameters = captured_parameters_for_error(error)
83
+ hashes << captured_parameters if captured_parameters
69
84
  hashes << parameters if parameters
70
85
 
71
86
  ::PeakFlowUtils::DeepMerger.execute!(hashes: hashes)
@@ -94,7 +109,7 @@ class PeakFlowUtils::Notifier
94
109
  error: error
95
110
  )
96
111
 
97
- merged_parameters = current_parameters(parameters: parameters)
112
+ merged_parameters = current_parameters(error: error, parameters: parameters)
98
113
 
99
114
  uri = URI("https://www.peakflow.io/errors/reports")
100
115
 
@@ -1,3 +1,3 @@
1
1
  module PeakFlowUtils
2
- VERSION = "0.1.24".freeze
2
+ VERSION = "0.1.27".freeze
3
3
  end
@@ -94,7 +94,8 @@ private
94
94
  )
95
95
  )
96
96
 
97
- run!("git", "add", VERSION_FILE.to_s)
97
+ run!("bundle", "install")
98
+ run!("git", "add", VERSION_FILE.to_s, "Gemfile.lock")
98
99
  end
99
100
 
100
101
  def commit!(next_version)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: peak_flow_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.24
4
+ version: 0.1.27
5
5
  platform: ruby
6
6
  authors:
7
7
  - kaspernj
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-03-30 00:00:00.000000000 Z
11
+ date: 2026-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails