pry-exception_explorer 0.1.3.5 → 0.1.4

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.
@@ -2,8 +2,18 @@
2
2
  class Exception
3
3
  NoContinuation = Class.new(StandardError)
4
4
 
5
+ # @return [Continuation] The continuation object for the exception.
6
+ # Invoking this continuation will allow the program to continue
7
+ # from the point the exception was raised.
5
8
  attr_accessor :continuation
9
+
10
+ # @return [Array<Binding>] The array of bindings that represent the
11
+ # call stack for the exception. This is navigable inside the Pry
12
+ # session with the `up` and `down` and `frame` commands.
6
13
  attr_accessor :exception_call_stack
14
+
15
+ # @return [Boolean] Whether this exception should be intercepted.
16
+ # (Only relevant for wrapped exceptions).
7
17
  attr_accessor :should_intercept
8
18
 
9
19
  # This method enables us to continue an exception (using
@@ -28,47 +38,48 @@ class Object
28
38
  exception = RuntimeError
29
39
  end
30
40
 
31
- if !PryExceptionExplorer.enabled?
32
- if exception.is_a?(Exception) || (exception.is_a?(Class) && exception < Exception)
33
- return super(*args)
34
- elsif exception.nil?
35
- if $!
36
- return super($!)
37
- else
38
- return super(RuntimeError)
39
- end
40
- else
41
- return super(*args)
42
- end
43
- end
44
-
45
41
  if exception.is_a?(Exception) || (exception.is_a?(Class) && exception < Exception)
46
- if string
47
- ex = exception.exception(string)
42
+ if PryExceptionExplorer.enabled?
43
+ ex = string ? exception.exception(string) : exception.exception
48
44
  else
49
- ex = exception.exception
45
+ return super(*args)
50
46
  end
51
47
  elsif exception.nil?
52
48
  if $!
53
- ex = $!.exception
49
+ if PryExceptionExplorer.enabled?
50
+ ex = $!.exception
51
+ else
52
+ return super($!)
53
+ end
54
54
  else
55
- ex = RuntimeError.exception
55
+ if PryExceptionExplorer.enabled?
56
+ ex = RuntimeError.exception
57
+ else
58
+ return super(RuntimeError)
59
+ end
56
60
  end
57
61
  else
58
- ex = RuntimeError.exception
62
+ if PryExceptionExplorer.enabled?
63
+ ex = RuntimeError.exception
64
+ else
65
+ return super(*args)
66
+ end
59
67
  end
60
68
 
61
69
  ex.set_backtrace(array ? array : caller)
62
70
 
63
71
  intercept_object = PryExceptionExplorer.intercept_object
64
72
 
73
+ # FIXME: CodeRay stuff is a hack because CodeRay generates a bunch of
74
+ # exceptions that would cause EE to infiniloop on
75
+ # intercept(Exception), find a better solution.
65
76
  if PryExceptionExplorer.should_intercept_exception?(binding.of_caller(1), ex) &&
66
77
  binding.of_caller(1).eval('[__method__, self.to_s]') != [:make_plugin_hash, "CodeRay::Encoders"]
67
78
 
68
79
  ex.exception_call_stack = binding.callers.tap { |v| v.shift(1 + intercept_object.skip_num) }
69
80
  PryExceptionExplorer.amend_exception_call_stack!(ex)
70
81
 
71
- ex.should_intercept = true
82
+ ex.should_intercept = true
72
83
 
73
84
  if !PryExceptionExplorer.wrap_active?
74
85
  retval = PryExceptionExplorer.enter_exception(ex, :inline => true)
@@ -1,3 +1,3 @@
1
1
  module PryExceptionExplorer
2
- VERSION = "0.1.3.5"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -136,11 +136,14 @@ module PryExceptionExplorer
136
136
  def amend_exception_call_stack!(ex)
137
137
  call_stack = ex.exception_call_stack
138
138
 
139
+ # skip_until
139
140
  if intercept_object.skip_until_block
140
141
  idx = call_stack.each_with_index.find_index do |frame, idx|
141
142
  intercept_object.skip_until_block.call(LazyFrame.new(frame, idx, call_stack))
142
143
  end
143
144
  call_stack = call_stack.drop(idx) if idx
145
+
146
+ # skip_while
144
147
  elsif intercept_object.skip_while_block
145
148
  idx = call_stack.each_with_index.find_index do |frame, idx|
146
149
  intercept_object.skip_while_block.call(LazyFrame.new(frame, idx, call_stack)) == false
@@ -173,7 +176,7 @@ module PryExceptionExplorer
173
176
  # entered inline (i.e within the `raise` method itself)
174
177
  def enter_exception(ex, options={})
175
178
  hooks = Pry.config.hooks.dup.add_hook(:before_session, :set_exception_flag) do |_, _, _pry_|
176
- setup_exception_context(ex, _pry_, options) if SE.frame_manager(_pry_)
179
+ setup_exception_context(ex, _pry_, options)
177
180
  end.add_hook(:before_session, :manage_intercept_recurse) do
178
181
  PryExceptionExplorer.intercept_object.disable! if !PryExceptionExplorer.intercept_object.intercept_recurse?
179
182
  end.add_hook(:after_session, :manage_intercept_recurse) do
@@ -182,7 +185,6 @@ module PryExceptionExplorer
182
185
 
183
186
  # Pry.load_plugins
184
187
  # binding.pry # if we have this here and step through with pry-nav sometimes we get segfaults :/
185
- # end
186
188
 
187
189
  Pry.start self, :call_stack => ex.exception_call_stack, :hooks => hooks
188
190
  end
@@ -2,19 +2,19 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "pry-exception_explorer"
5
- s.version = "0.1.3.2"
5
+ s.version = "0.1.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["John Mair (banisterfiend)"]
9
- s.date = "2012-02-06"
9
+ s.date = "2012-02-08"
10
10
  s.description = "Enter the context of exceptions"
11
11
  s.email = "jrmair@gmail.com"
12
- s.files = [".gemtest", ".gitignore", ".travis.yml", ".yardopts", "CHANGELOG", "Gemfile", "LICENSE", "README.md", "Rakefile", "examples/example_c_inline.rb", "examples/example_inline.rb", "examples/example_wrap.rb", "lib/pry-exception_explorer.rb", "lib/pry-exception_explorer/cli.rb", "lib/pry-exception_explorer/commands.rb", "lib/pry-exception_explorer/core_ext.rb", "lib/pry-exception_explorer/intercept.rb", "lib/pry-exception_explorer/lazy_frame.rb", "lib/pry-exception_explorer/shim_builder.rb", "lib/pry-exception_explorer/version.rb", "pry-exception_explorer.gemspec", "test/helper.rb", "test/test_exceptions_in_pry.rb", "test/test_inline_exceptions.rb", "test/test_wrapped_exceptions.rb"]
12
+ s.files = [".gemtest", ".gitignore", ".travis.yml", ".yardopts", "CHANGELOG", "Gemfile", "LICENSE", "README.md", "Rakefile", "examples/example_c_inline.rb", "examples/example_inline.rb", "examples/example_wrap.rb", "lib/pry-exception_explorer.rb", "lib/pry-exception_explorer/cli.rb", "lib/pry-exception_explorer/commands.rb", "lib/pry-exception_explorer/core_ext.rb", "lib/pry-exception_explorer/intercept.rb", "lib/pry-exception_explorer/lazy_frame.rb", "lib/pry-exception_explorer/shim_builder.rb", "lib/pry-exception_explorer/version.rb", "pry-exception_explorer.gemspec", "test/helper.rb", "test/test_exceptions_in_pry.rb", "test/test_inline_exceptions.rb", "test/test_raise.rb", "test/test_wrapped_exceptions.rb"]
13
13
  s.homepage = "https://github.com/banister/pry-exception_explorer"
14
14
  s.require_paths = ["lib"]
15
- s.rubygems_version = "1.8.11"
15
+ s.rubygems_version = "1.8.15"
16
16
  s.summary = "Enter the context of exceptions"
17
- s.test_files = ["test/helper.rb", "test/test_exceptions_in_pry.rb", "test/test_inline_exceptions.rb", "test/test_wrapped_exceptions.rb"]
17
+ s.test_files = ["test/helper.rb", "test/test_exceptions_in_pry.rb", "test/test_inline_exceptions.rb", "test/test_raise.rb", "test/test_wrapped_exceptions.rb"]
18
18
 
19
19
  if s.respond_to? :specification_version then
20
20
  s.specification_version = 3
@@ -0,0 +1,132 @@
1
+ require 'helper'
2
+
3
+ describe PryExceptionExplorer do
4
+
5
+ describe "normal raise behaviour (EE.enabled = false)" do
6
+ before do
7
+ EE.enabled = false
8
+ end
9
+
10
+ it 'should raise the exception that was raised' do
11
+ begin
12
+ raise ArgumentError
13
+ rescue => ex
14
+ ex.is_a?(ArgumentError).should == true
15
+ end
16
+ end
17
+
18
+ it 'should keep message' do
19
+ begin
20
+ raise ArgumentError, "hello"
21
+ rescue => ex
22
+ ex.message.should == "hello"
23
+ end
24
+ end
25
+
26
+ it 'should implicitly re-raise rescued exceptione' do
27
+ begin
28
+ raise ArgumentError
29
+ rescue => ex
30
+ begin
31
+ raise
32
+ rescue => ex2
33
+ ex2.is_a?(ArgumentError).should == true
34
+ end
35
+ end
36
+ end
37
+
38
+ it 'should implicitly raise RuntimeError (when not inside rescue)' do
39
+ begin
40
+ raise
41
+ rescue => ex
42
+ ex.is_a?(RuntimeError).should == true
43
+ end
44
+ end
45
+
46
+ it 'should re-raise raised rescued exception' do
47
+ begin
48
+ raise ArgumentError
49
+ rescue => ex
50
+ begin
51
+ raise ex
52
+ rescue
53
+ ex.is_a?(ArgumentError).should == true
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ describe "raise behaviour AFTER interception (EE.enabled = true)" do
60
+ before do
61
+ Pry.config.hooks.add_hook(:when_started, :save_caller_bindings, WhenStartedHook)
62
+ Pry.config.hooks.add_hook(:after_session, :delete_frame_manager, AfterSessionHook)
63
+
64
+ EE.enabled = true
65
+ EE.intercept(ArgumentError)
66
+ EE.wrap_active = false
67
+ Pry.config.input = StringIO.new("exit-all\n")
68
+ # Pry.config.input = Readline
69
+ # Pry.config.output = $stdout
70
+ end
71
+
72
+ after do
73
+ Pry.config.hooks.delete_hook(:when_started, :save_caller_bindings)
74
+ Pry.config.hooks.delete_hook(:after_session, :delete_frame_manager)
75
+ end
76
+
77
+ it 'should raise the exception that was raised' do
78
+ begin
79
+ raise ArgumentError
80
+ rescue => ex
81
+ ex.is_a?(ArgumentError).should == true
82
+ end
83
+ end
84
+
85
+ it 'should keep message' do
86
+ begin
87
+ raise ArgumentError, "hello"
88
+ rescue => ex
89
+ ex.message.should == "hello"
90
+ end
91
+ end
92
+
93
+ it 'should implicitly re-raise rescued exceptione' do
94
+ begin
95
+ raise ArgumentError
96
+ rescue => ex
97
+ begin
98
+ raise
99
+ rescue => ex2
100
+ ex2.is_a?(ArgumentError).should == true
101
+ end
102
+ end
103
+ end
104
+
105
+ it 'should implicitly raise RuntimeError (when not inside rescue)' do
106
+ begin
107
+ raise
108
+ rescue => ex
109
+ ex.is_a?(RuntimeError).should == true
110
+ end
111
+ end
112
+
113
+ it 'should re-raise raised rescued exception' do
114
+ begin
115
+ raise ArgumentError
116
+ rescue => ex
117
+ begin
118
+ raise ex
119
+ rescue
120
+ ex.is_a?(ArgumentError).should == true
121
+ end
122
+ end
123
+ end
124
+
125
+
126
+
127
+
128
+
129
+ end
130
+ end
131
+
132
+
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.1.3.5
4
+ version: 0.1.4
5
5
  prerelease:
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-02-07 00:00:00.000000000 Z
12
+ date: 2012-02-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pry-stack_explorer
16
- requirement: &70111051563380 !ruby/object:Gem::Requirement
16
+ requirement: &70190810463180 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70111051563380
24
+ version_requirements: *70190810463180
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bacon
27
- requirement: &70111051562760 !ruby/object:Gem::Requirement
27
+ requirement: &70190810462680 !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: *70111051562760
35
+ version_requirements: *70190810462680
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70111051562200 !ruby/object:Gem::Requirement
38
+ requirement: &70190810462080 !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: *70111051562200
46
+ version_requirements: *70190810462080
47
47
  description: Enter the context of exceptions
48
48
  email: jrmair@gmail.com
49
49
  executables: []
@@ -74,6 +74,7 @@ files:
74
74
  - test/helper.rb
75
75
  - test/test_exceptions_in_pry.rb
76
76
  - test/test_inline_exceptions.rb
77
+ - test/test_raise.rb
77
78
  - test/test_wrapped_exceptions.rb
78
79
  homepage: https://github.com/banister/pry-exception_explorer
79
80
  licenses: []
@@ -103,4 +104,5 @@ test_files:
103
104
  - test/helper.rb
104
105
  - test/test_exceptions_in_pry.rb
105
106
  - test/test_inline_exceptions.rb
107
+ - test/test_raise.rb
106
108
  - test/test_wrapped_exceptions.rb