pry-rescue 1.5.0 → 1.5.1
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.
- 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
|