pry-rescue 0.15 → 0.16

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/README.md CHANGED
@@ -75,6 +75,30 @@ end
75
75
  Pry::rescue{ test }
76
76
  ```
77
77
 
78
+ cd-raise
79
+ ========
80
+
81
+ If you've run some code in Pry, and an exception was raised, you can use the `cd-raise`
82
+ command:
83
+
84
+ ```
85
+ [1] pry(main)> foo
86
+ RuntimeError: two
87
+ from a.rb:4:in `rescue in foo'
88
+ [2] pry(main)> cd-raise
89
+ From: a.rb @ line 4 Object#foo:
90
+
91
+ 1: def foo
92
+ 2: raise "one"
93
+ 3: rescue => e
94
+ => 4: raise "two"
95
+ 5: end
96
+
97
+ [1] pry(main)>
98
+ ```
99
+
100
+ To get back from `cd-raise` you can either type `<ctrl+d>` or `cd ..`.
101
+
78
102
  cd-cause
79
103
  ========
80
104
 
@@ -24,6 +24,11 @@ begin
24
24
  rescue LoadError
25
25
  end
26
26
 
27
+ # Ensure that any exceptions raised within pry are available
28
+ Pry.config.hooks.add_hook :before_session, :enable_rescuing do
29
+ Pry.enable_rescuing!
30
+ end
31
+
27
32
  # PryRescue provides the ability to open a Pry shell whenever an unhandled exception is
28
33
  # raised in your code.
29
34
  #
@@ -104,11 +109,21 @@ class PryRescue
104
109
  # @param [String] file the absolute path
105
110
  # @return [Boolean]
106
111
  def user_path?(file)
107
- return false if file.match(%r(/vendor/))
108
- return true if file.match(Dir.pwd)
109
- !file.start_with?(RbConfig::CONFIG['libdir']) &&
110
- !gem_path?(file) &&
111
- !%w( (eval) <internal:prelude> ).include?(file)
112
+ return true if current_path?(file)
113
+ return false if stdlib_path?(file) || gem_path?(file)
114
+ true
115
+ end
116
+
117
+ # Is this file definitely part of the codebase the user is working on?
118
+ #
119
+ # This function exists because sometimes Dir.pwd can be a gem_path?,
120
+ # and the user expects to be able to debug a gem when they're cd'd
121
+ # into it.
122
+ #
123
+ # @param [String] file the absolute path
124
+ # @return [Boolean]
125
+ def current_path?(file)
126
+ file.start_with?(Dir.pwd) && !file.match(%r(/vendor/))
112
127
  end
113
128
 
114
129
  # Is this path included in a gem?
@@ -125,6 +140,14 @@ class PryRescue
125
140
  end
126
141
  end
127
142
 
143
+ # Is this path in the ruby standard library?
144
+ #
145
+ # @param [String] file the absolute path
146
+ # @return [Boolean]
147
+ def stdlib_path?(file)
148
+ file.start_with?(RbConfig::CONFIG['libdir']) || %w( (eval) <internal:prelude> ).include?(file)
149
+ end
150
+
128
151
  # Remove bindings that are part of Interception/Pry.rescue's internal
129
152
  # event handling that happens as part of the exception hooking process.
130
153
  #
@@ -1,4 +1,4 @@
1
- Pry::Commands.create_command "cd-cause", "Move to the previously raised exception" do
1
+ Pry::Commands.create_command "cd-cause", "Move to the exception that caused this exception to happen" do
2
2
 
3
3
  banner <<-BANNER
4
4
  Usage: cd-cause
@@ -43,6 +43,36 @@ Pry::Commands.create_command "cd-cause", "Move to the previously raised exceptio
43
43
  end
44
44
  end
45
45
 
46
+ Pry::Commands.create_command "cd-raise", "Move to the point at which an exception was raised" do
47
+ banner <<-BANNER
48
+ Usage: cd-raise [_ex_]
49
+
50
+ Starts a new pry session at the point that the given exception was raised.
51
+
52
+ If no exception is given, defaults to _ex_, the most recent exception that
53
+ was raised by code you ran from within pry.
54
+
55
+ @example
56
+
57
+ [2] pry(main)> foo
58
+ RuntimeError: two
59
+ from /home/conrad/0/ruby/pry-rescue/a.rb:4:in `rescue in foo'
60
+ [3] pry(main)> cd-raise
61
+
62
+ 1: def foo
63
+ 2: raise "one"
64
+ 3: rescue => e
65
+ => 4: raise "two"
66
+ 5: end
67
+ BANNER
68
+
69
+ def process
70
+ ex = target.eval(args.first || "_ex_")
71
+ raise Pry::CommandError, "No most recent exception" unless ex
72
+ Pry.rescued(ex)
73
+ end
74
+ end
75
+
46
76
  Pry::Commands.create_command "try-again", "Re-try the code that caused this exception" do
47
77
 
48
78
  banner <<-BANNER
@@ -74,7 +74,7 @@ class << Pry
74
74
  # end
75
75
  #
76
76
  def enable_rescuing!
77
- @raised = []
77
+ @raised ||= []
78
78
  @rescuing = true
79
79
  Interception.listen do |exception, binding|
80
80
  if defined?(PryStackExplorer)
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'pry-rescue'
3
- s.version = '0.15'
3
+ s.version = '0.16'
4
4
  s.summary = 'Open a pry session on any unhandled exceptions'
5
5
  s.description = 'Allows you to wrap code in Pry::rescue{ } to open a pry session at any unhandled exceptions'
6
6
  s.homepage = 'https://github.com/ConradIrwin/pry-rescue'
@@ -17,6 +17,38 @@ describe "pry-rescue commands" do
17
17
  end
18
18
  end
19
19
 
20
+ describe "cd-raise" do
21
+ it "should enter the context of an explicit exception" do
22
+ begin
23
+ b1 = binding
24
+ raise "original"
25
+ rescue => e1
26
+ b2 = binding
27
+ end
28
+
29
+ Pry.should_receive(:rescued).once.with{ |raised|
30
+ raised.should == e1
31
+ }
32
+
33
+ Pry.new.process_command 'cd-raise e1', '', binding
34
+ end
35
+
36
+ it "should enter the context of _ex_ if no exception is given" do
37
+ begin
38
+ b1 = binding
39
+ raise "original"
40
+ rescue => _ex_
41
+ b2 = binding
42
+ end
43
+
44
+ Pry.should_receive(:rescued).once.with{ |raised|
45
+ raised.should == _ex_
46
+ }
47
+
48
+ Pry.new.process_command 'cd-raise', '', binding
49
+ end
50
+ end
51
+
20
52
  describe "cd-cause" do
21
53
  it "should enter the next exception's context" do
22
54
  begin
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pry-rescue
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.15'
4
+ version: '0.16'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-01-07 00:00:00.000000000 Z
14
+ date: 2013-01-21 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: pry