enhanced_errors 2.1.1 → 2.1.2

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.
data/doc/Exception.html CHANGED
@@ -241,9 +241,9 @@
241
241
  </div>
242
242
 
243
243
  <div id="footer">
244
- Generated on Sun Dec 15 22:33:19 2024 by
244
+ Generated on Mon Dec 16 10:41:42 2024 by
245
245
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
246
- 0.9.37 (ruby-3.1.3).
246
+ 0.9.37 (ruby-3.3.6).
247
247
  </div>
248
248
 
249
249
  </div>
data/doc/Minitest.html CHANGED
@@ -228,9 +228,9 @@
228
228
  </div>
229
229
 
230
230
  <div id="footer">
231
- Generated on Sun Dec 15 22:33:19 2024 by
231
+ Generated on Mon Dec 16 10:41:42 2024 by
232
232
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
233
- 0.9.37 (ruby-3.1.3).
233
+ 0.9.37 (ruby-3.3.6).
234
234
  </div>
235
235
 
236
236
  </div>
data/doc/_index.html CHANGED
@@ -135,9 +135,9 @@
135
135
  </div>
136
136
 
137
137
  <div id="footer">
138
- Generated on Sun Dec 15 22:33:19 2024 by
138
+ Generated on Mon Dec 16 10:41:42 2024 by
139
139
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
140
- 0.9.37 (ruby-3.1.3).
140
+ 0.9.37 (ruby-3.3.6).
141
141
  </div>
142
142
 
143
143
  </div>
data/doc/file.README.html CHANGED
@@ -384,7 +384,7 @@
384
384
  <ul><li>
385
385
  <p><strong>Info Level</strong>: Respects the skip list, excluding predefined sensitive or irrelevant variables. Global variables are ignored.</p>
386
386
  </li><li>
387
- <p><strong>Debug Level</strong>: Ignores the skip lists, capturing all variables including those typically excluded and global variables. Global variables are only captured in debug mode, and they exclude the default Ruby global variables.</p>
387
+ <p><strong>Debug Level</strong>: Ignores the skip lists, capturing all variables including those typically excluded and global variables. Global variables are only captured in debug mode, and they exclude the default Ruby global variables.</p>
388
388
  </li></ul>
389
389
 
390
390
  <p><strong>Default Behavior</strong>: By default, <code>info</code> level is used, which excludes variables in the skip list to protect sensitive information. In <code>debug</code> mode, the skip lists are ignored to provide more comprehensive data, which is useful during development but should be used cautiously to avoid exposing sensitive data. The info mode is recommended.</p>
@@ -486,9 +486,9 @@
486
486
  </div></div>
487
487
 
488
488
  <div id="footer">
489
- Generated on Sun Dec 15 22:33:19 2024 by
489
+ Generated on Mon Dec 16 10:41:42 2024 by
490
490
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
491
- 0.9.37 (ruby-3.1.3).
491
+ 0.9.37 (ruby-3.3.6).
492
492
  </div>
493
493
 
494
494
  </div>
data/doc/index.html CHANGED
@@ -384,7 +384,7 @@
384
384
  <ul><li>
385
385
  <p><strong>Info Level</strong>: Respects the skip list, excluding predefined sensitive or irrelevant variables. Global variables are ignored.</p>
386
386
  </li><li>
387
- <p><strong>Debug Level</strong>: Ignores the skip lists, capturing all variables including those typically excluded and global variables. Global variables are only captured in debug mode, and they exclude the default Ruby global variables.</p>
387
+ <p><strong>Debug Level</strong>: Ignores the skip lists, capturing all variables including those typically excluded and global variables. Global variables are only captured in debug mode, and they exclude the default Ruby global variables.</p>
388
388
  </li></ul>
389
389
 
390
390
  <p><strong>Default Behavior</strong>: By default, <code>info</code> level is used, which excludes variables in the skip list to protect sensitive information. In <code>debug</code> mode, the skip lists are ignored to provide more comprehensive data, which is useful during development but should be used cautiously to avoid exposing sensitive data. The info mode is recommended.</p>
@@ -486,9 +486,9 @@
486
486
  </div></div>
487
487
 
488
488
  <div id="footer">
489
- Generated on Sun Dec 15 22:33:19 2024 by
489
+ Generated on Mon Dec 16 10:41:42 2024 by
490
490
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
491
- 0.9.37 (ruby-3.1.3).
491
+ 0.9.37 (ruby-3.3.6).
492
492
  </div>
493
493
 
494
494
  </div>
data/doc/method_list.html CHANGED
@@ -105,7 +105,7 @@
105
105
 
106
106
  <li class="even ">
107
107
  <div class="item">
108
- <span class='object_link'><a href="EnhancedErrors.html#capture_rescue-class_method" title="EnhancedErrors.capture_rescue (method)">capture_rescue</a></span>
108
+ <span class='object_link'><a href="EnhancedErrors.html#capture_limit_exceeded%3F-class_method" title="EnhancedErrors.capture_limit_exceeded? (method)">capture_limit_exceeded?</a></span>
109
109
  <small>EnhancedErrors</small>
110
110
  </div>
111
111
  </li>
@@ -113,13 +113,21 @@
113
113
 
114
114
  <li class="odd ">
115
115
  <div class="item">
116
- <span class='object_link'><a href="EnhancedErrors.html#capture_rescue=-class_method" title="EnhancedErrors.capture_rescue= (method)">capture_rescue=</a></span>
116
+ <span class='object_link'><a href="EnhancedErrors.html#capture_rescue-class_method" title="EnhancedErrors.capture_rescue (method)">capture_rescue</a></span>
117
117
  <small>EnhancedErrors</small>
118
118
  </div>
119
119
  </li>
120
120
 
121
121
 
122
122
  <li class="even ">
123
+ <div class="item">
124
+ <span class='object_link'><a href="EnhancedErrors.html#capture_rescue=-class_method" title="EnhancedErrors.capture_rescue= (method)">capture_rescue=</a></span>
125
+ <small>EnhancedErrors</small>
126
+ </div>
127
+ </li>
128
+
129
+
130
+ <li class="odd ">
123
131
  <div class="item">
124
132
  <span class='object_link'><a href="Exception.html#captured_variables-instance_method" title="Exception#captured_variables (method)">#captured_variables</a></span>
125
133
  <small>Exception</small>
@@ -127,7 +135,7 @@
127
135
  </li>
128
136
 
129
137
 
130
- <li class="odd ">
138
+ <li class="even ">
131
139
  <div class="item">
132
140
  <span class='object_link'><a href="EnhancedErrors.html#class_to_string-class_method" title="EnhancedErrors.class_to_string (method)">class_to_string</a></span>
133
141
  <small>EnhancedErrors</small>
@@ -135,7 +143,7 @@
135
143
  </li>
136
144
 
137
145
 
138
- <li class="even ">
146
+ <li class="odd ">
139
147
  <div class="item">
140
148
  <span class='object_link'><a href="Enhanced/Colors.html#code-class_method" title="Enhanced::Colors.code (method)">code</a></span>
141
149
  <small>Enhanced::Colors</small>
@@ -143,7 +151,7 @@
143
151
  </li>
144
152
 
145
153
 
146
- <li class="odd ">
154
+ <li class="even ">
147
155
  <div class="item">
148
156
  <span class='object_link'><a href="Enhanced/Colors.html#color-class_method" title="Enhanced::Colors.color (method)">color</a></span>
149
157
  <small>Enhanced::Colors</small>
@@ -151,7 +159,7 @@
151
159
  </li>
152
160
 
153
161
 
154
- <li class="even ">
162
+ <li class="odd ">
155
163
  <div class="item">
156
164
  <span class='object_link'><a href="EnhancedErrors.html#config_block-class_method" title="EnhancedErrors.config_block (method)">config_block</a></span>
157
165
  <small>EnhancedErrors</small>
@@ -159,7 +167,7 @@
159
167
  </li>
160
168
 
161
169
 
162
- <li class="odd ">
170
+ <li class="even ">
163
171
  <div class="item">
164
172
  <span class='object_link'><a href="EnhancedErrors.html#convert_binding_to_binding_info-class_method" title="EnhancedErrors.convert_binding_to_binding_info (method)">convert_binding_to_binding_info</a></span>
165
173
  <small>EnhancedErrors</small>
@@ -167,6 +175,14 @@
167
175
  </li>
168
176
 
169
177
 
178
+ <li class="odd ">
179
+ <div class="item">
180
+ <span class='object_link'><a href="EnhancedErrors.html#disable_capturing!-class_method" title="EnhancedErrors.disable_capturing! (method)">disable_capturing!</a></span>
181
+ <small>EnhancedErrors</small>
182
+ </div>
183
+ </li>
184
+
185
+
170
186
  <li class="even ">
171
187
  <div class="item">
172
188
  <span class='object_link'><a href="EnhancedErrors.html#eligible_for_capture-class_method" title="EnhancedErrors.eligible_for_capture (method)">eligible_for_capture</a></span>
@@ -200,6 +216,14 @@
200
216
 
201
217
 
202
218
  <li class="even ">
219
+ <div class="item">
220
+ <span class='object_link'><a href="EnhancedErrors.html#enforce_capture_limit!-class_method" title="EnhancedErrors.enforce_capture_limit! (method)">enforce_capture_limit!</a></span>
221
+ <small>EnhancedErrors</small>
222
+ </div>
223
+ </li>
224
+
225
+
226
+ <li class="odd ">
203
227
  <div class="item">
204
228
  <span class='object_link'><a href="EnhancedErrors.html#enhance_exceptions!-class_method" title="EnhancedErrors.enhance_exceptions! (method)">enhance_exceptions!</a></span>
205
229
  <small>EnhancedErrors</small>
@@ -207,6 +231,14 @@
207
231
  </li>
208
232
 
209
233
 
234
+ <li class="even ">
235
+ <div class="item">
236
+ <span class='object_link'><a href="EnhancedErrors.html#exception_trace-class_method" title="EnhancedErrors.exception_trace (method)">exception_trace</a></span>
237
+ <small>EnhancedErrors</small>
238
+ </div>
239
+ </li>
240
+
241
+
210
242
  <li class="odd ">
211
243
  <div class="item">
212
244
  <span class='object_link'><a href="EnhancedErrors.html#format-class_method" title="EnhancedErrors.format (method)">format</a></span>
@@ -384,14 +416,6 @@
384
416
 
385
417
 
386
418
  <li class="odd ">
387
- <div class="item">
388
- <span class='object_link'><a href="EnhancedErrors.html#safely_prepend_rspec_custom_failure_message-class_method" title="EnhancedErrors.safely_prepend_rspec_custom_failure_message (method)">safely_prepend_rspec_custom_failure_message</a></span>
389
- <small>EnhancedErrors</small>
390
- </div>
391
- </li>
392
-
393
-
394
- <li class="even ">
395
419
  <div class="item">
396
420
  <span class='object_link'><a href="EnhancedErrors.html#skip_list-class_method" title="EnhancedErrors.skip_list (method)">skip_list</a></span>
397
421
  <small>EnhancedErrors</small>
@@ -399,17 +423,9 @@
399
423
  </li>
400
424
 
401
425
 
402
- <li class="odd ">
403
- <div class="item">
404
- <span class='object_link'><a href="EnhancedErrors.html#start_minitest_binding_capture-class_method" title="EnhancedErrors.start_minitest_binding_capture (method)">start_minitest_binding_capture</a></span>
405
- <small>EnhancedErrors</small>
406
- </div>
407
- </li>
408
-
409
-
410
426
  <li class="even ">
411
427
  <div class="item">
412
- <span class='object_link'><a href="EnhancedErrors.html#start_rspec_binding_capture-class_method" title="EnhancedErrors.start_rspec_binding_capture (method)">start_rspec_binding_capture</a></span>
428
+ <span class='object_link'><a href="EnhancedErrors.html#start_minitest_binding_capture-class_method" title="EnhancedErrors.start_minitest_binding_capture (method)">start_minitest_binding_capture</a></span>
413
429
  <small>EnhancedErrors</small>
414
430
  </div>
415
431
  </li>
@@ -417,7 +433,7 @@
417
433
 
418
434
  <li class="odd ">
419
435
  <div class="item">
420
- <span class='object_link'><a href="EnhancedErrors.html#stop_minitest_binding_capture-class_method" title="EnhancedErrors.stop_minitest_binding_capture (method)">stop_minitest_binding_capture</a></span>
436
+ <span class='object_link'><a href="EnhancedErrors.html#start_rspec_binding_capture-class_method" title="EnhancedErrors.start_rspec_binding_capture (method)">start_rspec_binding_capture</a></span>
421
437
  <small>EnhancedErrors</small>
422
438
  </div>
423
439
  </li>
@@ -425,7 +441,7 @@
425
441
 
426
442
  <li class="even ">
427
443
  <div class="item">
428
- <span class='object_link'><a href="EnhancedErrors.html#stop_rspec_binding_capture-class_method" title="EnhancedErrors.stop_rspec_binding_capture (method)">stop_rspec_binding_capture</a></span>
444
+ <span class='object_link'><a href="EnhancedErrors.html#stop_minitest_binding_capture-class_method" title="EnhancedErrors.stop_minitest_binding_capture (method)">stop_minitest_binding_capture</a></span>
429
445
  <small>EnhancedErrors</small>
430
446
  </div>
431
447
  </li>
@@ -433,7 +449,7 @@
433
449
 
434
450
  <li class="odd ">
435
451
  <div class="item">
436
- <span class='object_link'><a href="EnhancedErrors.html#trace-class_method" title="EnhancedErrors.trace (method)">trace</a></span>
452
+ <span class='object_link'><a href="EnhancedErrors.html#stop_rspec_binding_capture-class_method" title="EnhancedErrors.stop_rspec_binding_capture (method)">stop_rspec_binding_capture</a></span>
437
453
  <small>EnhancedErrors</small>
438
454
  </div>
439
455
  </li>
@@ -122,9 +122,9 @@
122
122
  </div>
123
123
 
124
124
  <div id="footer">
125
- Generated on Sun Dec 15 22:33:19 2024 by
125
+ Generated on Mon Dec 16 10:41:42 2024 by
126
126
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
127
- 0.9.37 (ruby-3.1.3).
127
+ 0.9.37 (ruby-3.3.6).
128
128
  </div>
129
129
 
130
130
  </div>
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "enhanced_errors"
3
- spec.version = "2.1.1"
3
+ spec.version = "2.1.2"
4
4
  spec.authors = ["Eric Beland"]
5
5
 
6
6
  spec.summary = "Automatically enhance your errors with messages containing variable values from the moment they were raised."
@@ -21,65 +21,64 @@ class EnhancedErrors
21
21
  @monitor ||= Monitor.new
22
22
  end
23
23
 
24
- attr_accessor :enabled, :config_block, :on_capture_hook, :eligible_for_capture, :trace, :override_messages
24
+ attr_accessor :enabled, :config_block, :on_capture_hook, :eligible_for_capture, :exception_trace, :override_messages
25
25
 
26
26
  GEMS_REGEX = %r{[\/\\]gems[\/\\]}
27
- RSPEC_EXAMPLE_REGEXP = /RSpec::ExampleGroups::[A-Z0-9]+.*/
28
27
  DEFAULT_MAX_LENGTH = 2000
29
28
  MAX_BINDING_INFOS = 3
30
29
 
31
30
  RSPEC_SKIP_LIST = [
32
- :@__inspect_output,
33
- :@__memoized,
34
- :@assertion_delegator,
35
- :@assertion_instance,
36
- :@assertions,
37
- :@connection_subscriber,
38
- :@example,
39
- :@fixture_cache,
40
- :@fixture_cache_key,
41
- :@fixture_connection_pools,
42
- :@fixture_connections,
43
- :@integration_session,
44
- :@legacy_saved_pool_configs,
45
- :@loaded_fixtures,
46
- :@matcher_definitions,
47
- :@saved_pool_configs
48
- ].freeze
31
+ :@__inspect_output,
32
+ :@__memoized,
33
+ :@assertion_delegator,
34
+ :@assertion_instance,
35
+ :@assertions,
36
+ :@connection_subscriber,
37
+ :@example,
38
+ :@fixture_cache,
39
+ :@fixture_cache_key,
40
+ :@fixture_connection_pools,
41
+ :@fixture_connections,
42
+ :@integration_session,
43
+ :@legacy_saved_pool_configs,
44
+ :@loaded_fixtures,
45
+ :@matcher_definitions,
46
+ :@saved_pool_configs
47
+ ].freeze
49
48
 
50
49
  RAILS_SKIP_LIST = [
51
- :@new_record,
52
- :@attributes,
53
- :@association_cache,
54
- :@readonly,
55
- :@previously_new_record,
56
- :@_routes,
57
- :@routes,
58
- :@app,
59
- :@arel_table,
60
- :@assertion_instance,
61
- :@association_cache,
62
- :@attributes,
63
- :@destroyed,
64
- :@destroyed_by_association,
65
- :@find_by_statement_cache,
66
- :@generated_relation_method,
67
- :@integration_session,
68
- :@marked_for_destruction,
69
- :@mutations_before_last_save,
70
- :@mutations_from_database,
71
- :@new_record,
72
- :@predicate_builder,
73
- :@previously_new_record,
74
- :@primary_key,
75
- :@readonly,
76
- :@relation_delegate_cache,
77
- :@response,
78
- :@response_klass,
79
- :@routes,
80
- :@strict_loading,
81
- :@strict_loading_mode
82
- ].freeze
50
+ :@new_record,
51
+ :@attributes,
52
+ :@association_cache,
53
+ :@readonly,
54
+ :@previously_new_record,
55
+ :@_routes,
56
+ :@routes,
57
+ :@app,
58
+ :@arel_table,
59
+ :@assertion_instance,
60
+ :@association_cache,
61
+ :@attributes,
62
+ :@destroyed,
63
+ :@destroyed_by_association,
64
+ :@find_by_statement_cache,
65
+ :@generated_relation_method,
66
+ :@integration_session,
67
+ :@marked_for_destruction,
68
+ :@mutations_before_last_save,
69
+ :@mutations_from_database,
70
+ :@new_record,
71
+ :@predicate_builder,
72
+ :@previously_new_record,
73
+ :@primary_key,
74
+ :@readonly,
75
+ :@relation_delegate_cache,
76
+ :@response,
77
+ :@response_klass,
78
+ :@routes,
79
+ :@strict_loading,
80
+ :@strict_loading_mode
81
+ ].freeze
83
82
 
84
83
  MINITEST_SKIP_LIST = [:@NAME, :@failures, :@time].freeze
85
84
 
@@ -96,12 +95,11 @@ class EnhancedErrors
96
95
  @output_format = nil
97
96
  @eligible_for_capture = nil
98
97
  @original_global_variables = nil
99
- @trace = nil
98
+ @exception_trace = nil
100
99
  @override_messages = nil
101
- @rspec_failure_message_loaded = nil
102
100
 
103
101
  # Default values
104
- @max_capture_events = -1 # -1 means no limit
102
+ @max_capture_events = -1 # -1 means no limit
105
103
  @capture_events_count = 0
106
104
 
107
105
  # Thread-safe getters and setters
@@ -118,11 +116,11 @@ class EnhancedErrors
118
116
  end
119
117
 
120
118
  def capture_rescue
121
- mutex.synchronize { @capture_rescue }
119
+ mutex.synchronize { @capture_rescue }
122
120
  end
123
121
 
124
122
  def capture_events_count
125
- mutex.synchronize { @capture_events_count }
123
+ mutex.synchronize { @capture_events_count || 0 }
126
124
  end
127
125
 
128
126
  def capture_events_count=(val)
@@ -130,7 +128,7 @@ class EnhancedErrors
130
128
  end
131
129
 
132
130
  def max_capture_events
133
- mutex.synchronize { @max_capture_events }
131
+ mutex.synchronize { @max_capture_events || -1 }
134
132
  end
135
133
 
136
134
  def max_capture_events=(value)
@@ -141,7 +139,7 @@ class EnhancedErrors
141
139
  if @enabled
142
140
  puts "EnhancedErrors: max_capture_events set to 0, disabling capturing."
143
141
  @enabled = false
144
- @trace&.disable
142
+ @exception_trace&.disable
145
143
  @rspec_tracepoint&.disable
146
144
  @minitest_trace&.disable
147
145
  end
@@ -149,25 +147,36 @@ class EnhancedErrors
149
147
  end
150
148
  end
151
149
 
150
+ def enforce_capture_limit!
151
+ disable_capturing! if capture_limit_exceeded?
152
+ end
153
+
154
+ def capture_limit_exceeded?
155
+ mutex.synchronize do
156
+ max_capture_events > 0 && capture_events_count >= max_capture_events
157
+ end
158
+ end
159
+
160
+ def disable_capturing!
161
+ mutex.synchronize do
162
+ @enabled = false
163
+ @rspec_tracepoint&.disable
164
+ @minitest_trace&.disable
165
+ @exception_trace&.disable
166
+ end
167
+ end
168
+
152
169
  def increment_capture_events_count
153
170
  mutex.synchronize do
154
171
  @capture_events_count ||= 0
155
172
  @max_capture_events ||= -1
156
173
  @capture_events_count += 1
157
- # Check if we've hit the limit
158
- if @max_capture_events > 0 && @capture_events_count >= @max_capture_events
159
- # puts "EnhancedErrors: max_capture_events limit (#{@max_capture_events}) reached, disabling capturing."
160
- @enabled = false
161
- end
162
174
  end
163
175
  end
164
176
 
165
177
  def reset_capture_events_count
166
178
  mutex.synchronize do
167
179
  @capture_events_count = 0
168
- @enabled = true
169
- @rspec_tracepoint.enable if @rspec_tracepoint
170
- @trace.enable if @trace
171
180
  end
172
181
  end
173
182
 
@@ -228,8 +237,8 @@ class EnhancedErrors
228
237
 
229
238
  def enhance_exceptions!(enabled: true, debug: false, capture_events: nil, override_messages: false, **options, &block)
230
239
  mutex.synchronize do
231
- @trace&.disable
232
- @trace = nil
240
+ @exception_trace&.disable
241
+ @exception_trace = nil
233
242
 
234
243
  @output_format = nil
235
244
  @eligible_for_capture = nil
@@ -237,7 +246,9 @@ class EnhancedErrors
237
246
  @override_messages = override_messages
238
247
 
239
248
  # Ensure these are not nil
240
- @max_capture_events = -1 if @max_capture_events.nil?
249
+ if @max_capture_events.nil?
250
+ @max_capture_events = -1
251
+ end
241
252
  @capture_events_count = 0
242
253
 
243
254
  @rspec_failure_message_loaded = true
@@ -273,13 +284,13 @@ class EnhancedErrors
273
284
  end
274
285
 
275
286
  events = @capture_events ? @capture_events.to_a : default_capture_events
276
- @trace = TracePoint.new(*events) do |tp|
287
+ @exception_trace = TracePoint.new(*events) do |tp|
277
288
  handle_tracepoint_event(tp)
278
289
  end
279
290
 
280
291
  # Only enable trace if still enabled and not limited
281
292
  if @enabled && (@max_capture_events == -1 || @capture_events_count < @max_capture_events)
282
- @trace.enable
293
+ @exception_trace.enable
283
294
  end
284
295
  end
285
296
  end
@@ -295,23 +306,12 @@ class EnhancedErrors
295
306
  end
296
307
  end
297
308
 
298
- def safely_prepend_rspec_custom_failure_message
299
- mutex.synchronize do
300
- return if @rspec_failure_message_loaded
301
- if defined?(RSpec::Core::Example) && !RSpec::Core::Example < Enhanced::Integrations::RSpecErrorFailureMessage
302
- RSpec::Core::Example.prepend(Enhanced::Integrations::RSpecErrorFailureMessage)
303
- @rspec_failure_message_loaded = true
304
- end
305
- end
306
- rescue => e
307
- puts "Failed to prepend RSpec custom failure message: #{e.message}"
308
- end
309
-
310
309
  def is_a_minitest?(klass)
311
310
  klass.ancestors.include?(Minitest::Test) && klass.name != 'Minitest::Test'
312
311
  end
313
312
 
314
313
  def start_minitest_binding_capture
314
+ return if capture_limit_exceeded?
315
315
  mutex.synchronize do
316
316
  @minitest_trace = TracePoint.new(:return) do |tp|
317
317
  next unless tp.method_id.to_s.start_with?('test_') && is_a_minitest?(tp.defined_class)
@@ -322,6 +322,7 @@ class EnhancedErrors
322
322
  end
323
323
 
324
324
  def stop_minitest_binding_capture
325
+ disable_capturing! if capture_limit_exceeded?
325
326
  mutex.synchronize do
326
327
  @minitest_trace&.disable
327
328
  @minitest_trace = nil
@@ -332,22 +333,22 @@ class EnhancedErrors
332
333
  def class_to_string(klass)
333
334
  return '' if klass.nil?
334
335
  if klass.singleton_class?
335
- klass.to_s.match(/#<Class:(.*?)>/)[1]
336
+ (match = klass.to_s.match(/#<Class:(.*?)>/)) ? match[1] : klass.to_s
336
337
  else
337
338
  klass.to_s
338
339
  end
339
340
  end
340
341
 
341
342
  def is_rspec_example?(tracepoint)
342
- tracepoint.method_id.nil? && !(tracepoint.path.include?('rspec')) && tracepoint.path.end_with?('_spec.rb')
343
+ tracepoint.method_id.nil? && !(tracepoint.path.include?('rspec')) && tracepoint.path.end_with?('_spec.rb')
343
344
  end
344
345
 
345
346
  def start_rspec_binding_capture
347
+ return if capture_limit_exceeded?
346
348
  mutex.synchronize do
347
349
  @rspec_example_binding = nil
348
350
  @capture_next_binding = false
349
351
  @rspec_tracepoint&.disable
350
- @enabled = true if @enabled.nil?
351
352
 
352
353
  @rspec_tracepoint = TracePoint.new(:raise, :b_return) do |tp|
353
354
  # puts "name #{tp.raised_exception.class.name rescue ''} method:#{tp.method_id} tp.binding:#{tp.binding.local_variables rescue ''}"
@@ -381,6 +382,7 @@ class EnhancedErrors
381
382
  end
382
383
 
383
384
  def stop_rspec_binding_capture
385
+ disable_capturing! if capture_limit_exceeded?
384
386
  mutex.synchronize do
385
387
  @rspec_tracepoint&.disable
386
388
  @rspec_tracepoint = nil
@@ -606,6 +608,7 @@ class EnhancedErrors
606
608
 
607
609
  def handle_tracepoint_event(tp)
608
610
  # Check enabled outside the synchronized block for speed, but still safe due to re-check inside.
611
+ enforce_capture_limit!
609
612
  return unless mutex.synchronize { @enabled }
610
613
  return if Thread.current[:enhanced_errors_processing] || Thread.current[:on_capture] || ignored_exception?(tp.raised_exception)
611
614
 
@@ -751,7 +754,7 @@ class EnhancedErrors
751
754
  end
752
755
 
753
756
  def valid_capture_events?(capture_events)
754
- capture_events.is_a?(Array) && [:raise, :rescue] && capture_events
757
+ capture_events.is_a?(Array) && capture_events.all? { |ev| [:raise, :rescue].include?(ev) }
755
758
  end
756
759
 
757
760
  def extract_arguments(tp, method_name)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enhanced_errors
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Beland
@@ -136,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
136
  - !ruby/object:Gem::Version
137
137
  version: '0'
138
138
  requirements: []
139
- rubygems_version: 3.3.26
139
+ rubygems_version: 3.5.22
140
140
  signing_key:
141
141
  specification_version: 4
142
142
  summary: Automatically enhance your errors with messages containing variable values