pry-rescue 1.5.0 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rspec +1 -0
- data/.travis.yml +2 -3
- data/CHANGELOG.md +3 -0
- data/README.md +23 -0
- data/lib/pry-rescue.rb +4 -3
- data/lib/pry-rescue/rspec.rb +1 -0
- data/lib/pry-rescue/source_location.rb +13 -0
- data/pry-rescue.gemspec +1 -20
- data/spec/pry_rescue_spec.rb +20 -12
- data/spec/source_location_spec.rb +19 -0
- metadata +7 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c70d483edf7b738214f0f22aa4d9fb81909de0de007cb6e581124331d1d8eeb8
|
4
|
+
data.tar.gz: d9cfd93f342bfe7373ab80b83e2f7f0304ea3472037e10877b640324bf0b5fc3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff2b45da86ffec10f67fae0c3aa4d24270d5c907d8b3380cecb580f50ff37a0c733c2d8dd956c925081bc20d84e1b9bc9a15e10030ba49ed8bce1a83824b5732
|
7
|
+
data.tar.gz: 22e51ce3bcc20834edb13e115c9030d2c6945466886d85d0a9a239a69ebfdc38dde922e2968a07c0408134e00a8adc7954e071c21e1cf9b4604b2ea7073b9b8c
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -84,6 +84,7 @@ browser on unhandled exceptions, and [pry-rails](https://github.com/rweng/pry-ra
|
|
84
84
|
adds some Rails specific helpers to Pry, and replaces `rails console` by Pry.
|
85
85
|
|
86
86
|
### RSpec
|
87
|
+
**ActiveRecord users: see below caveat**
|
87
88
|
|
88
89
|
If you're using [RSpec](https://rspec.org) or
|
89
90
|
[respec](https://github.com/oggy/respec), you can open a Pry session on
|
@@ -105,10 +106,32 @@ RSpec::Expectations::ExpectationNotMetError: expected: 0.3
|
|
105
106
|
[1] pry(main)>
|
106
107
|
```
|
107
108
|
|
109
|
+
### Important caveat when using with Rails/ActiveRecord and transactional fixtures
|
110
|
+
> Records are missing but should be there! Am I losing track of reality?
|
111
|
+
|
112
|
+
You are not. (Probably.)
|
113
|
+
|
114
|
+
By default, RSpec runs test examples in a transaction, and rolls it back when done.
|
115
|
+
By the time Pry-Rescue fires, the transaction has already been rolled back and records are gone!
|
116
|
+
|
117
|
+
A good sanity check is to call `Model.all`. It will usually be empty. However, at the time of the test, they were truly there.
|
118
|
+
|
119
|
+
This bug is currently tracked at [#99](https://github.com/ConradIrwin/pry-rescue/issues/99).
|
120
|
+
|
121
|
+
Current workaround: Pry-Rescue can't be used, but you can use `binding.pry` inside the test. You'll have access to all records you need there.
|
122
|
+
|
123
|
+
### Using pry `edit`
|
108
124
|
Unfortunately using `edit -c` to edit `_spec.rb` files does not yet reload the
|
109
125
|
code in a way that the `try-again` command can understand. You can still use
|
110
126
|
`try-again` if you edit code that is not in spec files.
|
111
127
|
|
128
|
+
### Always enabled
|
129
|
+
If you want pry-rescue to *always* be enabled when you run tests, simply add this line to your `test_helper.rb`:
|
130
|
+
|
131
|
+
```ruby
|
132
|
+
require 'pry-rescue/rspec'
|
133
|
+
```
|
134
|
+
|
112
135
|
### Minitest
|
113
136
|
|
114
137
|
Add the following to your `test_helper.rb` or to the top of your test file.
|
data/lib/pry-rescue.rb
CHANGED
@@ -6,6 +6,7 @@ require File.expand_path('../pry-rescue/core_ext', __FILE__)
|
|
6
6
|
require File.expand_path('../pry-rescue/commands', __FILE__)
|
7
7
|
require File.expand_path('../pry-rescue/rack', __FILE__)
|
8
8
|
require File.expand_path('../pry-rescue/peek.rb', __FILE__)
|
9
|
+
require File.expand_path('../pry-rescue/source_location.rb', __FILE__)
|
9
10
|
|
10
11
|
if ENV['PRY_RESCUE_RAILS']
|
11
12
|
require File.expand_path('../pry-rescue/rails', __FILE__)
|
@@ -103,7 +104,7 @@ class PryRescue
|
|
103
104
|
# @param [Exception] e The raised exception
|
104
105
|
def phantom_load_raise?(e)
|
105
106
|
bindings = e.instance_variable_get(:@rescue_bindings)
|
106
|
-
bindings.any? && bindings.first
|
107
|
+
bindings.any? && SourceLocation.call(bindings.first)[0] == __FILE__
|
107
108
|
end
|
108
109
|
|
109
110
|
# When using pry-stack-explorer we want to start the rescue session outside of gems
|
@@ -113,7 +114,7 @@ class PryRescue
|
|
113
114
|
# @return [Fixnum] The offset of the first binding of user code
|
114
115
|
def initial_frame(bindings)
|
115
116
|
bindings.each_with_index do |binding, i|
|
116
|
-
return i if user_path?(
|
117
|
+
return i if user_path?(SourceLocation.call(binding)[0])
|
117
118
|
end
|
118
119
|
|
119
120
|
0
|
@@ -170,7 +171,7 @@ class PryRescue
|
|
170
171
|
def without_bindings_below_raise(bindings)
|
171
172
|
return bindings if bindings.size <= 1
|
172
173
|
bindings.drop_while do |b|
|
173
|
-
|
174
|
+
SourceLocation.call(b)[0] == File.expand_path("../pry-rescue/core_ext.rb", __FILE__)
|
174
175
|
end.drop_while do |b|
|
175
176
|
Interception == b.eval("self")
|
176
177
|
end
|
data/lib/pry-rescue/rspec.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
class PryRescue
|
2
|
+
module SourceLocation
|
3
|
+
DEPRECATION_TIME = Time.new(2021,4,1)
|
4
|
+
|
5
|
+
WithRuby2_5 = ->(b){ [b.eval("__FILE__"), b.eval("__LINE__")] }
|
6
|
+
WithRuby2_6 = ->(b){ b.source_location }
|
7
|
+
|
8
|
+
define_singleton_method(
|
9
|
+
:call,
|
10
|
+
(RUBY_VERSION < "2.6.0") ? WithRuby2_5 : WithRuby2_6
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
data/pry-rescue.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'pry-rescue'
|
3
|
-
s.version = '1.5.
|
3
|
+
s.version = '1.5.1'
|
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'
|
@@ -20,23 +20,4 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.add_development_dependency 'rspec'
|
21
21
|
s.add_development_dependency 'redcarpet'
|
22
22
|
s.add_development_dependency 'capybara'
|
23
|
-
|
24
|
-
# SPECIAL DEVELOPMENT GEM FOR OLD RUBY
|
25
|
-
# DONT USE THIS TRICK FOR RUNTIME GEM
|
26
|
-
if Gem::Version.create(RUBY_VERSION) < Gem::Version.create("2.2.2")
|
27
|
-
s.add_development_dependency 'yard', '< 0.9.6'
|
28
|
-
s.add_development_dependency 'rack', ['~> 1.6', '< 1.7']
|
29
|
-
else
|
30
|
-
s.add_development_dependency 'yard'
|
31
|
-
end
|
32
|
-
if Gem::Version.create(RUBY_VERSION) < Gem::Version.create("2.1")
|
33
|
-
# capybara > nokogiri
|
34
|
-
s.add_development_dependency 'nokogiri', ['~> 1.6', '< 1.7.0']
|
35
|
-
end
|
36
|
-
if Gem::Version.create(RUBY_VERSION) < Gem::Version.create("2.0")
|
37
|
-
# capybara > addressable > public_suffix
|
38
|
-
s.add_development_dependency 'public_suffix', ['~> 1.4', '< 1.5']
|
39
|
-
# capybara > mime-types
|
40
|
-
s.add_development_dependency 'mime-types', ['~> 2.6', '< 2.99']
|
41
|
-
end
|
42
23
|
end
|
data/spec/pry_rescue_spec.rb
CHANGED
@@ -2,10 +2,18 @@ require File.expand_path('../../lib/pry-rescue.rb', __FILE__)
|
|
2
2
|
require 'uri'
|
3
3
|
|
4
4
|
describe "PryRescue.load" do
|
5
|
+
before :all do
|
6
|
+
if !binding.respond_to?(:source_location)
|
7
|
+
Binding.define_method :source_location do
|
8
|
+
PryRescue::SourceLocation.call(self)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
5
13
|
if defined?(PryStackExplorer)
|
6
14
|
it "should open at the correct point" do
|
7
15
|
expect(PryRescue).to receive(:pry).once { |opts|
|
8
|
-
expect(opts[:call_stack].first.
|
16
|
+
expect(opts[:call_stack].first.source_location[0]).to end_with('spec/fixtures/simple.rb')
|
9
17
|
}
|
10
18
|
expect(lambda {
|
11
19
|
PryRescue.load("spec/fixtures/simple.rb")
|
@@ -14,7 +22,7 @@ describe "PryRescue.load" do
|
|
14
22
|
|
15
23
|
it "should open above the standard library" do
|
16
24
|
expect(PryRescue).to receive(:pry).once do |opts|
|
17
|
-
expect(opts[:call_stack][opts[:initial_frame]].
|
25
|
+
expect(opts[:call_stack][opts[:initial_frame]].source_location[0]).to end_with('spec/fixtures/uri.rb')
|
18
26
|
end
|
19
27
|
expect(lambda{
|
20
28
|
PryRescue.load("spec/fixtures/uri.rb")
|
@@ -23,7 +31,7 @@ describe "PryRescue.load" do
|
|
23
31
|
|
24
32
|
it "should keep the standard library on the binding stack" do
|
25
33
|
expect(PryRescue).to receive(:pry).once do |opts|
|
26
|
-
expect(opts[:call_stack].first.
|
34
|
+
expect(opts[:call_stack].first.source_location[0]).to start_with(RbConfig::CONFIG['libdir'])
|
27
35
|
end
|
28
36
|
expect(lambda{
|
29
37
|
PryRescue.load("spec/fixtures/uri.rb")
|
@@ -32,7 +40,7 @@ describe "PryRescue.load" do
|
|
32
40
|
|
33
41
|
it "should open above gems" do
|
34
42
|
expect(PryRescue).to receive(:pry).once do |opts|
|
35
|
-
expect(opts[:call_stack][opts[:initial_frame]].
|
43
|
+
expect(opts[:call_stack][opts[:initial_frame]].source_location[0]).to end_with('spec/fixtures/coderay.rb')
|
36
44
|
end
|
37
45
|
expect(lambda{
|
38
46
|
PryRescue.load("spec/fixtures/coderay.rb")
|
@@ -45,7 +53,7 @@ describe "PryRescue.load" do
|
|
45
53
|
Gem::Specification.detect{|x| x.name == 'coderay' }.full_gem_path :
|
46
54
|
Gem.all_load_paths.grep(/coderay/).last
|
47
55
|
|
48
|
-
expect(opts[:call_stack].first.
|
56
|
+
expect(opts[:call_stack].first.source_location[0]).to start_with(coderay_path)
|
49
57
|
end
|
50
58
|
expect(lambda{
|
51
59
|
PryRescue.load("spec/fixtures/coderay.rb")
|
@@ -67,8 +75,8 @@ describe "PryRescue.load" do
|
|
67
75
|
|
68
76
|
it "should filter out duplicate stack frames" do
|
69
77
|
expect(PryRescue).to receive(:pry).once do |opts|
|
70
|
-
expect(opts[:call_stack][0].
|
71
|
-
expect(opts[:call_stack][1].
|
78
|
+
expect(opts[:call_stack][0].source_location[1]).to be(4)
|
79
|
+
expect(opts[:call_stack][1].source_location[1]).to be(12)
|
72
80
|
end
|
73
81
|
expect(lambda{
|
74
82
|
PryRescue.load("spec/fixtures/super.rb")
|
@@ -77,8 +85,8 @@ describe "PryRescue.load" do
|
|
77
85
|
|
78
86
|
it "should calculate correct initial frame even when duplicates are present" do
|
79
87
|
expect(PryRescue).to receive(:pry).once do |opts|
|
80
|
-
expect(opts[:call_stack][0].
|
81
|
-
expect(opts[:call_stack][opts[:initial_frame]].
|
88
|
+
expect(opts[:call_stack][0].source_location[0]).to end_with('fake.rb')
|
89
|
+
expect(opts[:call_stack][opts[:initial_frame]].source_location[0]).to end_with('spec/fixtures/initial.rb')
|
82
90
|
end
|
83
91
|
expect(lambda{
|
84
92
|
PryRescue.load("spec/fixtures/initial.rb")
|
@@ -87,7 +95,7 @@ describe "PryRescue.load" do
|
|
87
95
|
|
88
96
|
it "should skip over reraises from within gems" do
|
89
97
|
expect(PryRescue).to receive(:pry).once do |opts|
|
90
|
-
expect(opts[:call_stack][0].
|
98
|
+
expect(opts[:call_stack][0].source_location[0]).to end_with('spec/fixtures/reraise.rb')
|
91
99
|
end
|
92
100
|
expect(lambda{
|
93
101
|
PryRescue.load("spec/fixtures/reraise.rb")
|
@@ -96,7 +104,7 @@ describe "PryRescue.load" do
|
|
96
104
|
|
97
105
|
it "should not skip over independent raises within gems" do
|
98
106
|
expect(PryRescue).to receive(:pry).once do |opts|
|
99
|
-
expect(opts[:call_stack][0].
|
107
|
+
expect(opts[:call_stack][0].source_location[0]).to end_with('fake.rb')
|
100
108
|
end
|
101
109
|
expect(lambda{
|
102
110
|
PryRescue.load("spec/fixtures/raiseother.rb")
|
@@ -111,7 +119,7 @@ describe "PryRescue.load" do
|
|
111
119
|
else
|
112
120
|
it "should open at the correct point" do
|
113
121
|
expect(Pry).to receive(:start).once { |binding, h|
|
114
|
-
expect(binding.
|
122
|
+
expect(binding.source_location[0]).to end_with('spec/fixtures/simple.rb')
|
115
123
|
}
|
116
124
|
expect(lambda{
|
117
125
|
PryRescue.load("spec/fixtures/simple.rb")
|
@@ -0,0 +1,19 @@
|
|
1
|
+
describe PryRescue::SourceLocation do
|
2
|
+
describe ".call" do
|
3
|
+
subject{ described_class.call(binding) }
|
4
|
+
|
5
|
+
it "matches [file, line]" do
|
6
|
+
is_expected.to match([__FILE__, be_between(2,30)])
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
it "will be removed when Ruby 2.5 is EOL" do
|
11
|
+
time = Time.now
|
12
|
+
|
13
|
+
if time >= described_class::DEPRECATION_TIME
|
14
|
+
expect(
|
15
|
+
defined?(PryRescue::SourceLocation)
|
16
|
+
).to be false
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
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: 1.5.
|
4
|
+
version: 1.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Conrad Irwin
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2020-05-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: pry
|
@@ -110,20 +110,6 @@ dependencies:
|
|
110
110
|
- - ">="
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '0'
|
113
|
-
- !ruby/object:Gem::Dependency
|
114
|
-
name: yard
|
115
|
-
requirement: !ruby/object:Gem::Requirement
|
116
|
-
requirements:
|
117
|
-
- - ">="
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
version: '0'
|
120
|
-
type: :development
|
121
|
-
prerelease: false
|
122
|
-
version_requirements: !ruby/object:Gem::Requirement
|
123
|
-
requirements:
|
124
|
-
- - ">="
|
125
|
-
- !ruby/object:Gem::Version
|
126
|
-
version: '0'
|
127
113
|
description: Allows you to wrap code in Pry::rescue{ } to open a pry session at any
|
128
114
|
unhandled exceptions
|
129
115
|
email:
|
@@ -137,7 +123,9 @@ extensions: []
|
|
137
123
|
extra_rdoc_files: []
|
138
124
|
files:
|
139
125
|
- ".gitignore"
|
126
|
+
- ".rspec"
|
140
127
|
- ".travis.yml"
|
128
|
+
- CHANGELOG.md
|
141
129
|
- Gemfile
|
142
130
|
- LICENSE.MIT
|
143
131
|
- README.md
|
@@ -168,6 +156,7 @@ files:
|
|
168
156
|
- lib/pry-rescue/rack.rb
|
169
157
|
- lib/pry-rescue/rails.rb
|
170
158
|
- lib/pry-rescue/rspec.rb
|
159
|
+
- lib/pry-rescue/source_location.rb
|
171
160
|
- lib/pry/rescue.rb
|
172
161
|
- pry-rescue.gemspec
|
173
162
|
- spec/commands_spec.rb
|
@@ -182,6 +171,7 @@ files:
|
|
182
171
|
- spec/fixtures/uri.rb
|
183
172
|
- spec/peek_spec.rb
|
184
173
|
- spec/pry_rescue_spec.rb
|
174
|
+
- spec/source_location_spec.rb
|
185
175
|
- spec/spec_helper.rb
|
186
176
|
homepage: https://github.com/ConradIrwin/pry-rescue
|
187
177
|
licenses:
|
@@ -202,8 +192,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
192
|
- !ruby/object:Gem::Version
|
203
193
|
version: '0'
|
204
194
|
requirements: []
|
205
|
-
|
206
|
-
rubygems_version: 2.6.11
|
195
|
+
rubygems_version: 3.0.3
|
207
196
|
signing_key:
|
208
197
|
specification_version: 4
|
209
198
|
summary: Open a pry session on any unhandled exceptions
|