enhanced_errors 2.0.5 → 2.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -16
- data/enhanced_errors.gemspec +1 -1
- data/lib/enhanced_errors.rb +28 -17
- metadata +2 -3
- data/lib/enhanced/integrations/rspec_error_failure_message.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e6ed241407a54376e0c64f2c1adc087e3dae4980ac5b7e84c947d92ff787392
|
4
|
+
data.tar.gz: 4f949a5145869e73e7f795a9c009800433956162a6d25695c2a9e8ba3a39da05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02312f5287c4214c59b4b4a53e723d53d4dff511f24c335a7f7a84f049bb06638f77ea22f488cba5682fba66f581116b2bb1a4b3a79d8b6a5a290f5f822f1ea8
|
7
|
+
data.tar.gz: 13d06fa670a3f34bb67624ec40bc9a87810536aace8c2867e64620092c13d8e48d25675241491d821491cb2f3a893c1d8faa2ede7ff2f22c45b50fb506fbbd74
|
data/README.md
CHANGED
@@ -79,33 +79,19 @@ exceptions except those that pass by during the RSpec run.
|
|
79
79
|
```ruby
|
80
80
|
|
81
81
|
RSpec.configure do |config|
|
82
|
-
|
83
|
-
# add these config changes to your RSpec config to get variable messages
|
84
|
-
config.before(:suite) do
|
85
|
-
RSpec::Core::Example.prepend(Enhanced::Integrations::RSpecErrorFailureMessage)
|
86
|
-
end
|
87
|
-
|
88
82
|
config.before(:example) do |_example|
|
89
83
|
EnhancedErrors.start_rspec_binding_capture
|
90
84
|
end
|
91
85
|
|
92
86
|
config.after(:example) do |example|
|
93
87
|
example.metadata[:expect_binding] = EnhancedErrors.stop_rspec_binding_capture
|
88
|
+
EnhancedErrors.override_exception_message(example.exception, example.metadata[:expect_binding])
|
94
89
|
end
|
95
|
-
|
96
90
|
end
|
97
|
-
|
98
91
|
```
|
99
92
|
|
100
|
-
## Minitest
|
101
|
-
|
102
|
-
Untested as of yet, but enhance_exceptions!(override_messages: true) is likely to work.
|
93
|
+
## TODO: Minitest
|
103
94
|
|
104
|
-
If anyone wants to look into an integration implementation like RSpec, it would
|
105
|
-
be welcomed. With a more targeted approach like the RSpec one, exceptions could be captured and
|
106
|
-
modified only during test time, like the RSpec approach. This would be advantageous as
|
107
|
-
it wouldn't modify the exception message itself, but still makes the variable output available in
|
108
|
-
test messages.
|
109
95
|
|
110
96
|
## Enhancing .message
|
111
97
|
|
data/enhanced_errors.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "enhanced_errors"
|
3
|
-
spec.version = "2.0.
|
3
|
+
spec.version = "2.0.6"
|
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."
|
data/lib/enhanced_errors.rb
CHANGED
@@ -3,14 +3,13 @@
|
|
3
3
|
require 'set'
|
4
4
|
require 'json'
|
5
5
|
|
6
|
-
require_relative 'enhanced/integrations/rspec_error_failure_message'
|
7
6
|
require_relative 'enhanced/colors'
|
8
7
|
|
9
8
|
IGNORED_EXCEPTIONS = %w[SystemExit NoMemoryError SignalException Interrupt
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
ScriptError LoadError NotImplementedError SyntaxError
|
10
|
+
RSpec::Expectations::ExpectationNotMetError
|
11
|
+
RSpec::Matchers::BuiltIn::RaiseError
|
12
|
+
SystemStackError Psych::BadAlias]
|
14
13
|
|
15
14
|
class EnhancedErrors
|
16
15
|
extend ::Enhanced
|
@@ -106,7 +105,8 @@ class EnhancedErrors
|
|
106
105
|
# and modifies the exceptions .message to display the variables
|
107
106
|
def override_exception_message(exception, binding_or_bindings)
|
108
107
|
# Ensure binding_or_bindings is always an array for compatibility
|
109
|
-
return exception if binding_or_bindings.nil? || binding_or_bindings.empty?
|
108
|
+
return exception if binding_or_bindings.nil? || binding_or_bindings.empty?
|
109
|
+
return exception if exception.respond_to?(:unaltered_message)
|
110
110
|
variable_str = EnhancedErrors.format(binding_or_bindings)
|
111
111
|
message_str = exception.message
|
112
112
|
exception.define_singleton_method(:unaltered_message) { message_str }
|
@@ -186,26 +186,36 @@ class EnhancedErrors
|
|
186
186
|
puts "Failed to prepend RSpec custom failure message: #{e.message}"
|
187
187
|
end
|
188
188
|
|
189
|
-
|
190
189
|
def start_rspec_binding_capture
|
191
190
|
@rspec_example_binding = nil
|
191
|
+
@capture_next_binding = false
|
192
192
|
|
193
193
|
# In the Exception binding infos, I observed that re-setting
|
194
194
|
# the tracepoint without disabling it seemed to accumulate traces
|
195
195
|
# in the test suite where things are disabled and re-enabled often.
|
196
196
|
@rspec_tracepoint&.disable
|
197
197
|
|
198
|
-
@rspec_tracepoint = TracePoint.new(:b_return) do |tp|
|
198
|
+
@rspec_tracepoint = TracePoint.new(:raise, :b_return) do |tp|
|
199
199
|
# This is super-kluge-y and should be replaced with... something TBD
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
if
|
205
|
-
|
200
|
+
# only look at block returns once we have seen an ExpectationNotMetError
|
201
|
+
|
202
|
+
case tp.event
|
203
|
+
when :b_return
|
204
|
+
# only active if we are capturing the next binding
|
205
|
+
next unless @capture_next_binding && @rspec_example_binding.nil?
|
206
|
+
# early easy checks to nope out of the object name and other checks
|
207
|
+
if @capture_next_binding && tp.method_id.nil? && !(tp.path.include?('rspec')) && tp.path.end_with?('_spec.rb')
|
208
|
+
# fixes cases where class and name are screwed up or overridden
|
209
|
+
if determine_object_name(tp) =~ RSPEC_EXAMPLE_REGEXP
|
210
|
+
@rspec_example_binding = tp.binding
|
211
|
+
end
|
212
|
+
end
|
213
|
+
when :raise
|
214
|
+
# turn on capture of next binding
|
215
|
+
if tp.raised_exception.class.name == 'RSpec::Expectations::ExpectationNotMetError'
|
216
|
+
@capture_next_binding ||= true
|
206
217
|
end
|
207
218
|
end
|
208
|
-
|
209
219
|
end
|
210
220
|
|
211
221
|
@rspec_tracepoint.enable
|
@@ -214,6 +224,7 @@ class EnhancedErrors
|
|
214
224
|
def stop_rspec_binding_capture
|
215
225
|
@rspec_tracepoint&.disable
|
216
226
|
binding_info = convert_binding_to_binding_info(@rspec_example_binding) if @rspec_example_binding
|
227
|
+
@capture_next_binding = false
|
217
228
|
@rspec_example_binding = nil
|
218
229
|
binding_info
|
219
230
|
end
|
@@ -621,7 +632,7 @@ class EnhancedErrors
|
|
621
632
|
|
622
633
|
def variable_description(vars_hash)
|
623
634
|
vars_hash.map do |name, value|
|
624
|
-
"
|
635
|
+
" #{Colors.purple(name)}: #{format_variable(value)}\n"
|
625
636
|
end.join
|
626
637
|
rescue
|
627
638
|
''
|
@@ -691,4 +702,4 @@ class EnhancedErrors
|
|
691
702
|
!ignored && !rspec
|
692
703
|
end
|
693
704
|
end
|
694
|
-
end
|
705
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enhanced_errors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Beland
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-12-
|
11
|
+
date: 2024-12-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|
@@ -96,7 +96,6 @@ files:
|
|
96
96
|
- examples/example_spec.rb
|
97
97
|
- lib/enhanced/colors.rb
|
98
98
|
- lib/enhanced/exception.rb
|
99
|
-
- lib/enhanced/integrations/rspec_error_failure_message.rb
|
100
99
|
- lib/enhanced_errors.rb
|
101
100
|
homepage: https://github.com/ericbeland/enhanced_errors
|
102
101
|
licenses: []
|
@@ -1,13 +0,0 @@
|
|
1
|
-
module Enhanced
|
2
|
-
module Integrations
|
3
|
-
module RSpecErrorFailureMessage
|
4
|
-
def execution_result
|
5
|
-
result = super
|
6
|
-
if result.exception
|
7
|
-
EnhancedErrors.override_exception_message(result.exception, self.metadata[:expect_binding])
|
8
|
-
end
|
9
|
-
result
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|