pry-exception_explorer 0.2.0pre1 → 0.2.0pre2
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/lib/pry-exception_explorer.rb +10 -27
- data/lib/pry-exception_explorer/commands.rb +20 -7
- data/lib/pry-exception_explorer/core_ext.rb +0 -1
- data/lib/pry-exception_explorer/version.rb +1 -1
- data/test/test_exceptions_in_pry.rb +13 -1
- data/test/test_inline_exceptions.rb +0 -4
- data/test/test_raise.rb +0 -3
- metadata +8 -8
@@ -62,31 +62,15 @@ module PryExceptionExplorer
|
|
62
62
|
!!local_hash[:enabled]
|
63
63
|
end
|
64
64
|
|
65
|
-
# @param [Boolean] v Whether to intercept only those exceptions that bubble out of
|
66
|
-
# `EE.wrap` block.
|
67
|
-
def wrap_active=(v)
|
68
|
-
local_hash[:wrap_active] = v
|
69
|
-
end
|
70
|
-
|
71
|
-
# @return [Boolean] Whether to intercept only those exceptions that bubble out of
|
72
|
-
# `EE.wrap` block.
|
73
|
-
def wrap_active
|
74
|
-
!!local_hash[:wrap_active]
|
75
|
-
end
|
76
|
-
|
77
|
-
alias_method :wrap_active?, :wrap_active
|
78
65
|
alias_method :enabled?, :enabled
|
79
66
|
|
80
|
-
|
81
67
|
# Wrap the provided block - intercepting all exceptions
|
82
68
|
# that bubble out, provided they satisfy the
|
83
69
|
# assertion in `PryExceptionExplorer.intercept`.
|
84
70
|
# @yield The block to wrap.
|
85
71
|
def wrap
|
86
|
-
old_enabled,
|
87
|
-
old_inline = inline
|
72
|
+
old_enabled, old_inline = enabled, inline
|
88
73
|
self.enabled = true
|
89
|
-
self.wrap_active = true
|
90
74
|
self.inline = false
|
91
75
|
yield
|
92
76
|
rescue Exception => ex
|
@@ -96,9 +80,8 @@ module PryExceptionExplorer
|
|
96
80
|
raise ex
|
97
81
|
end
|
98
82
|
ensure
|
99
|
-
self.enabled
|
100
|
-
self.
|
101
|
-
self.inline = old_inline
|
83
|
+
self.enabled = old_enabled
|
84
|
+
self.inline = old_inline
|
102
85
|
end
|
103
86
|
|
104
87
|
# This method allows the user to assert the situations where an
|
@@ -222,16 +205,17 @@ module PryExceptionExplorer
|
|
222
205
|
|
223
206
|
# Set initial state
|
224
207
|
def init
|
225
|
-
|
208
|
+
|
209
|
+
# enable EE
|
226
210
|
PryExceptionExplorer.enabled = true
|
227
|
-
|
228
|
-
#
|
229
|
-
PryExceptionExplorer.
|
211
|
+
|
212
|
+
# auto-start sessions on exceptions that would kill the program
|
213
|
+
PryExceptionExplorer.post_mortem = true
|
230
214
|
|
231
215
|
# default is to capture all exceptions
|
232
|
-
PryExceptionExplorer.intercept
|
216
|
+
PryExceptionExplorer.intercept(Exception)
|
233
217
|
|
234
|
-
# disable by
|
218
|
+
# disable inline sessions by defulat
|
235
219
|
PryExceptionExplorer.inline = false
|
236
220
|
at_exit do
|
237
221
|
ex = $!
|
@@ -250,7 +234,6 @@ end
|
|
250
234
|
|
251
235
|
# Add a hook to enable EE when invoked via `pry` executable
|
252
236
|
Pry.config.hooks.add_hook(:when_started, :try_enable_exception_explorer) do
|
253
|
-
PryExceptionExplorer.wrap_active = true
|
254
237
|
PryExceptionExplorer.enabled = true
|
255
238
|
PryExceptionExplorer.inline = false
|
256
239
|
end
|
@@ -18,8 +18,8 @@ module PryExceptionExplorer
|
|
18
18
|
_pry_.last_exception
|
19
19
|
end
|
20
20
|
|
21
|
-
def enterable_exception?
|
22
|
-
PryExceptionExplorer.enabled &&
|
21
|
+
def enterable_exception?(ex=last_exception)
|
22
|
+
PryExceptionExplorer.enabled && ex && ex.exception_call_stack
|
23
23
|
end
|
24
24
|
|
25
25
|
def inline_exception?
|
@@ -46,21 +46,34 @@ module PryExceptionExplorer
|
|
46
46
|
BANNER
|
47
47
|
|
48
48
|
def process
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
ex = extract_exception
|
50
|
+
if enterable_exception?(ex)
|
51
|
+
PryStackExplorer.create_and_push_frame_manager(ex.exception_call_stack, _pry_)
|
52
|
+
PryExceptionExplorer.setup_exception_context(ex, _pry_)
|
52
53
|
|
53
54
|
# have to use _pry_.run_command instead of 'run' here as
|
54
55
|
# 'run' works on the current target which hasnt been updated
|
55
56
|
# yet, whereas _pry_.run_command operates on the newly
|
56
57
|
# updated target (the context of the exception)
|
57
58
|
_pry_.run_command "whereami"
|
58
|
-
elsif
|
59
|
-
raise Pry::CommandError, "Current exception can't be entered! (perhaps
|
59
|
+
elsif ex
|
60
|
+
raise Pry::CommandError, "Current exception can't be entered! (perhaps an internal exception)"
|
60
61
|
else
|
61
62
|
raise Pry::CommandError, "No exception to enter!"
|
62
63
|
end
|
63
64
|
end
|
65
|
+
|
66
|
+
def extract_exception
|
67
|
+
if !arg_string.empty?
|
68
|
+
ex = target.eval(arg_string)
|
69
|
+
raise if !ex.is_a?(Exception)
|
70
|
+
ex
|
71
|
+
else
|
72
|
+
last_exception
|
73
|
+
end
|
74
|
+
rescue
|
75
|
+
raise Pry::CommandError, "Parameter must be a valid exception object."
|
76
|
+
end
|
64
77
|
end
|
65
78
|
|
66
79
|
create_command "exit-exception", "Leave the context of the current exception." do
|
@@ -31,7 +31,6 @@ class Exception
|
|
31
31
|
alias_method :old_exception, :exception
|
32
32
|
|
33
33
|
def exception(*args, &block)
|
34
|
-
$e = binding.callers.drop(1)
|
35
34
|
if PryExceptionExplorer.enabled? &&
|
36
35
|
PryExceptionExplorer.should_intercept_exception?(binding.of_caller(1), self) &&
|
37
36
|
!caller.any? { |t| t.include?("raise") } && !exception_call_stack
|
@@ -6,7 +6,6 @@ describe PryExceptionExplorer do
|
|
6
6
|
|
7
7
|
before do
|
8
8
|
PryExceptionExplorer.intercept { true }
|
9
|
-
PryExceptionExplorer.wrap_active = true
|
10
9
|
PryExceptionExplorer.enabled = true
|
11
10
|
end
|
12
11
|
|
@@ -77,6 +76,19 @@ describe PryExceptionExplorer do
|
|
77
76
|
O.method_name.should == :toad
|
78
77
|
end
|
79
78
|
|
79
|
+
it "should be able to enter an explicitly provided exception (even if _ex_ has changed)" do
|
80
|
+
redirect_pry_io(InputTester.new("Ratty.new.ratty",
|
81
|
+
"ex = _ex_",
|
82
|
+
"AnotherException",
|
83
|
+
"enter-exception ex",
|
84
|
+
"O.method_name = __method__",
|
85
|
+
"exit", StringIO.new)) do
|
86
|
+
Pry.start
|
87
|
+
end
|
88
|
+
|
89
|
+
O.method_name.should == :toad
|
90
|
+
end
|
91
|
+
|
80
92
|
it "should have access to exception's caller" do
|
81
93
|
mock_pry("Ratty.new.ratty", "enter-exception", "show-stack", "exit").should =~ /toad.*?weasel.*?ratty/m
|
82
94
|
end
|
@@ -4,8 +4,6 @@ require 'ostruct'
|
|
4
4
|
# globally accessible state
|
5
5
|
O = OpenStruct.new
|
6
6
|
|
7
|
-
prev_wrap_state = PryExceptionExplorer.wrap_active
|
8
|
-
PryExceptionExplorer.wrap_active = false
|
9
7
|
PryExceptionExplorer.inline!
|
10
8
|
|
11
9
|
prev_intercept_state = PryExceptionExplorer.intercept_object
|
@@ -15,7 +13,6 @@ PryExceptionExplorer.enabled = true
|
|
15
13
|
describe PryExceptionExplorer do
|
16
14
|
|
17
15
|
before do
|
18
|
-
PryExceptionExplorer.wrap_active = false
|
19
16
|
O.exception_intercepted = false
|
20
17
|
|
21
18
|
# Ensure that when an exception is intercepted (a pry session
|
@@ -434,7 +431,6 @@ describe PryExceptionExplorer do
|
|
434
431
|
end
|
435
432
|
|
436
433
|
# restore to default
|
437
|
-
PryExceptionExplorer.wrap_active = prev_wrap_state
|
438
434
|
PryExceptionExplorer.intercept_object = prev_intercept_state
|
439
435
|
|
440
436
|
Object.send(:remove_const, :O)
|
data/test/test_raise.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pry-exception_explorer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.0pre2
|
5
5
|
prerelease: 5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pry-stack_explorer
|
16
|
-
requirement: &
|
16
|
+
requirement: &70215832457180 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.4.6
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70215832457180
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bacon
|
27
|
-
requirement: &
|
27
|
+
requirement: &70215832456340 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.1.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70215832456340
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &70215832455760 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0.9'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70215832455760
|
47
47
|
description: Enter the context of exceptions
|
48
48
|
email: jrmair@gmail.com
|
49
49
|
executables:
|