pry-rescue 1.4.2 → 1.5.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5c100b1d2a77a25c90d941e40641bdf84382df35
4
- data.tar.gz: 9bf84fe4f040c636b6e1c456ef28f5378d88bdc5
2
+ SHA256:
3
+ metadata.gz: 785059388e26fc08a04afc6d370b89efdc4506f3882738444e2ab0b99c229f20
4
+ data.tar.gz: 11ab228ba3b614eef01ba6687c97a36c76411245fdc6bcb03aaaaf9cd2a3c59c
5
5
  SHA512:
6
- metadata.gz: d7b8e77d58f7fa9e0f7d7170b38904833027ead2ace1216ad86283679c7a76225202a4a4cb686be9cac3de884d60458de7650d00f9b2240b80eaeb8bc5af0ebf
7
- data.tar.gz: 1b161c794e9fa6749e9921fe7c02468ddf67147c96252c62f03c018f2f35299865b9fd3a9a9e7bef5783b56a04709977cef1e8764dfb92e3c600eea736229afb
6
+ metadata.gz: 4ebeff09115b1ad7937b09e42ced421309b24d9674f7edab5d4f9c6acb504778de1506732220f687f81ebccdb0b16b1c34e49bed0c294b980a6eb3701e6d9d1a
7
+ data.tar.gz: 5c4ecf866a9d06f07447bab62cb51046e40cecbc8ad8cac796c7e40e573ce6c8ceda1a390e6d457a9eef146d9e2c8be79336025515c59188690d8567bc244f47
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper
@@ -1,7 +1,10 @@
1
1
  language: ruby
2
2
  cache: bundler
3
3
  rvm:
4
- - 1.9.3
5
- - 2.0.0
6
- - 2.1.0
7
- - rbx
4
+ - 2.5
5
+ - 2.6
6
+ - 2.7
7
+ - ruby-head
8
+ before_install:
9
+ - "gem update --system"
10
+ - "gem update bundler"
@@ -0,0 +1,11 @@
1
+ ## v1.5.2 (24 June 2020)
2
+ * RSpec: Fix Rescue opening after transactional tests are rolled back.
3
+ (issue #99 - PR #118) (@joallard)
4
+
5
+ * bin/rescue: Use realpaths (issue #109 - PR #110)
6
+
7
+ *(Damien Robert)*
8
+
9
+ ## v1.5.1 (22 May 2020)
10
+ * Make Binding#source_location polyfill. (Removes deprecation warnings
11
+ for Ruby 2.6+)
data/README.md CHANGED
@@ -109,6 +109,12 @@ Unfortunately using `edit -c` to edit `_spec.rb` files does not yet reload the
109
109
  code in a way that the `try-again` command can understand. You can still use
110
110
  `try-again` if you edit code that is not in spec files.
111
111
 
112
+ If you want pry-rescue to *always* be enabled when you run tests, simply add this line to your `test_helper.rb`:
113
+
114
+ ```ruby
115
+ require 'pry-rescue/rspec'
116
+ ```
117
+
112
118
  ### Minitest
113
119
 
114
120
  Add the following to your `test_helper.rb` or to the top of your test file.
data/Rakefile CHANGED
@@ -1,3 +1,4 @@
1
+ require "bundler/gem_tasks"
1
2
  require 'rspec/core/rake_task'
2
3
 
3
4
  task :default => :test
data/bin/rescue CHANGED
@@ -34,18 +34,26 @@ when '-i'
34
34
  when /\A-/
35
35
  puts USAGE
36
36
  exit
37
- when 'rails'
38
- ENV['PRY_RESCUE_RAILS'] = 'true'
39
- exec(*ARGV)
40
- when /^re?spec|rake$/
41
- ENV['SPEC_OPTS'] = "#{ENV['SPEC_OPTS']} -r pry-rescue/rspec"
42
- exec(*ARGV)
37
+ else
38
+ case File.basename(ARGV[0] || "")
39
+ when 'rails'
40
+ ENV['PRY_RESCUE_RAILS'] = 'true'
41
+ exec(*ARGV)
42
+ when 'rake'
43
+ require File.realpath(File.expand_path('../../lib/pry-rescue.rb', __FILE__))
44
+ PryRescue.load_rake ARGV[1]
45
+ exit
46
+ when /^re?spec$/
47
+ ENV['SPEC_OPTS'] = "#{ENV['SPEC_OPTS']} -r pry-rescue/rspec"
48
+ exec(*ARGV)
49
+ end
43
50
  end
44
51
 
45
52
  if script = ARGV.shift
46
53
  $0 = File.expand_path(script)
54
+
47
55
  if File.exists? script
48
- require File.expand_path('../../lib/pry-rescue.rb', __FILE__)
56
+ require File.realpath(File.expand_path('../../lib/pry-rescue.rb', __FILE__))
49
57
  PryRescue.load $0, ensure_repl
50
58
  else
51
59
  $stderr.puts "Error: #{script.inspect} not found."
@@ -6,13 +6,14 @@ 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__)
12
13
  end
13
14
  case ENV['PRY_PEEK']
14
15
  when nil
15
- PryRescue.peek_on_signal('QUIT') unless Pry::Helpers::BaseHelpers.windows?
16
+ PryRescue.peek_on_signal('QUIT') unless Pry::Helpers::Platform.windows?
16
17
  when ''
17
18
  # explicitly disable QUIT.
18
19
  else
@@ -79,6 +80,14 @@ class PryRescue
79
80
  end
80
81
  end
81
82
 
83
+ def load_rake(task)
84
+ require 'rake'
85
+ Pry::rescue do
86
+ load "#{Dir.pwd}/Rakefile"
87
+ Rake::Task[task].invoke
88
+ end
89
+ end
90
+
82
91
  # Is the user currently inside pry rescue?
83
92
  # @return [Boolean]
84
93
  def in_exception_context?
@@ -95,7 +104,7 @@ class PryRescue
95
104
  # @param [Exception] e The raised exception
96
105
  def phantom_load_raise?(e)
97
106
  bindings = e.instance_variable_get(:@rescue_bindings)
98
- bindings.any? && bindings.first.eval("__FILE__") == __FILE__
107
+ bindings.any? && SourceLocation.call(bindings.first)[0] == __FILE__
99
108
  end
100
109
 
101
110
  # When using pry-stack-explorer we want to start the rescue session outside of gems
@@ -105,7 +114,7 @@ class PryRescue
105
114
  # @return [Fixnum] The offset of the first binding of user code
106
115
  def initial_frame(bindings)
107
116
  bindings.each_with_index do |binding, i|
108
- return i if user_path?(binding.eval("__FILE__"))
117
+ return i if user_path?(SourceLocation.call(binding)[0])
109
118
  end
110
119
 
111
120
  0
@@ -162,7 +171,7 @@ class PryRescue
162
171
  def without_bindings_below_raise(bindings)
163
172
  return bindings if bindings.size <= 1
164
173
  bindings.drop_while do |b|
165
- b.eval("__FILE__") == File.expand_path("../pry-rescue/core_ext.rb", __FILE__)
174
+ SourceLocation.call(b)[0] == File.expand_path("../pry-rescue/core_ext.rb", __FILE__)
166
175
  end.drop_while do |b|
167
176
  Interception == b.eval("self")
168
177
  end
@@ -47,6 +47,8 @@ Pry::Commands.create_command "cd-cause", "Move to the exception that caused this
47
47
  ex = ex.instance_variable_get(:@rescue_cause) if rescued == ex
48
48
  raise Pry::CommandError, "No previous exception to cd-cause into" if ex.nil? || ex == rescued
49
49
 
50
+ ex = ex.cause if ex.respond_to?(:cause) && !ex.cause.nil?
51
+
50
52
  Pry.rescued ex
51
53
  end
52
54
  end
@@ -1,5 +1,6 @@
1
1
  require 'pry-rescue'
2
- require 'rspec'
2
+ require 'pry-stack_explorer'
3
+ require 'rspec' unless defined?(RSpec)
3
4
 
4
5
  class PryRescue
5
6
  class RSpec
@@ -7,24 +8,23 @@ class PryRescue
7
8
  # Run an Rspec example within Pry::rescue{ }.
8
9
  #
9
10
  # Takes care to ensure that `try-again` will work.
11
+ #
12
+ # `example` is a RSpec::Core::Example::Procsy
10
13
  def self.run(example)
11
14
  Pry::rescue do
12
15
  begin
13
16
  before
14
17
 
15
- example.binding.eval('@exception = nil; @example && @example.instance_variable_set(:@exception, nil)')
16
- example.binding.eval('example.instance_variable_set(:@exception, nil) if defined?(example)')
17
- example.binding.eval('@example && @example.example_group_instance.instance_variable_set(:@__memoized, {})')
18
- example.binding.eval('example.example_group_instance.instance_variable_set(:@__memoized, {}) if defined?(example)')
18
+ example.example.instance_variable_set(:@exception, nil)
19
+ example.example_group_instance.instance_variable_set(:@__init_memoized, true)
20
+
19
21
  example.run
20
- e = example.binding.eval('@exception || @example && @example.instance_variable_get(:@exception)')
21
- e ||= example.binding.eval('example.instance_variable_get(:@exception) if defined?(example)')
22
- if e
23
- Pry::rescued(e)
24
- end
22
+
23
+ # Rescued will be called in :after hook, which is ran before the second
24
+ # :around leg
25
25
 
26
26
  ensure
27
- after
27
+ after_outside
28
28
  end
29
29
  end
30
30
  end
@@ -33,7 +33,12 @@ class PryRescue
33
33
  monkeypatch_capybara if defined?(Capybara)
34
34
  end
35
35
 
36
- def self.after
36
+ def self.after(example)
37
+ e = example.exception
38
+ Pry::rescued(e) if e
39
+ end
40
+
41
+ def self.after_outside
37
42
  after_filters.each(&:call)
38
43
  end
39
44
 
@@ -62,4 +67,8 @@ RSpec.configure do |c|
62
67
  c.around(:each) do |example|
63
68
  PryRescue::RSpec.run example
64
69
  end
70
+
71
+ c.after(:each) do |example|
72
+ PryRescue::RSpec.after(example)
73
+ end
65
74
  end
@@ -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
@@ -1,23 +1,23 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'pry-rescue'
3
- s.version = '1.4.2'
3
+ s.version = '1.5.2'
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'
7
7
  s.email = ['conrad.irwin@gmail.com', 'jrmair@gmail.com', 'chris@ill-logic.com']
8
8
  s.authors = ['Conrad Irwin', 'banisterfiend', 'epitron']
9
9
  s.files = `git ls-files`.split("\n")
10
+ s.license = 'MIT'
10
11
  s.require_paths = ['lib']
11
12
  s.executables = s.files.grep(%r{^bin/}).map{|f| File.basename f}
12
13
 
13
- s.add_dependency 'pry'
14
+ s.add_dependency 'pry', '>= 0.12.0'
14
15
  s.add_dependency 'interception', '>= 0.5'
15
16
 
16
17
  s.add_development_dependency 'pry-stack_explorer' # upgrade to regular dep?
17
18
 
18
19
  s.add_development_dependency 'rake'
19
20
  s.add_development_dependency 'rspec'
20
- s.add_development_dependency 'yard'
21
21
  s.add_development_dependency 'redcarpet'
22
22
  s.add_development_dependency 'capybara'
23
23
  end
@@ -1,21 +1,22 @@
1
1
  require './spec/spec_helper'
2
+ require './spec/fixtures/template_error'
2
3
 
3
4
  describe "pry-rescue commands" do
4
5
  describe "try-again" do
5
6
  it "should throw try_again" do
6
- PryRescue.should_receive(:in_exception_context?).and_return{ true }
7
+ expect(PryRescue).to receive(:in_exception_context?).and_return(true)
7
8
 
8
- lambda{
9
- Pry.new.process_command "try-again", '', TOPLEVEL_BINDING
10
- }.should throw_symbol :try_again
9
+ expect {
10
+ Pry.new.process_command("try-again")
11
+ }.to throw_symbol(:try_again)
11
12
  end
12
13
 
13
14
  it "should raise a CommandError if not in Pry::rescue" do
14
- PryRescue.should_receive(:in_exception_context?).and_return{ false }
15
+ expect(PryRescue).to receive(:in_exception_context?).and_return(false)
15
16
 
16
- lambda{
17
- Pry.new.process_command "try-again", '', TOPLEVEL_BINDING
18
- }.should raise_error Pry::CommandError
17
+ expect {
18
+ Pry.new.process_command "try-again"
19
+ }.to raise_error Pry::CommandError
19
20
  end
20
21
  end
21
22
 
@@ -28,11 +29,11 @@ describe "pry-rescue commands" do
28
29
  b2 = binding
29
30
  end
30
31
 
31
- Pry.should_receive(:rescued).once.with{ |raised|
32
- raised.should == e1
33
- }
32
+ allow(Pry).to receive(:rescued).once do |raised|
33
+ expect(raised).to eq e1
34
+ end
34
35
 
35
- Pry.new.process_command 'cd-cause e1', '', binding
36
+ Pry.new.tap{ |p| p.push_binding(binding) }.process_command 'cd-cause e1'
36
37
  end
37
38
 
38
39
  it "should enter the context of _ex_ if no exception is given" do
@@ -47,15 +48,39 @@ describe "pry-rescue commands" do
47
48
  end
48
49
  end
49
50
 
50
- Pry.should_receive(:rescued).once.with{ |raised|
51
- raised.should == _ex_
52
- }
51
+ allow(Pry).to receive(:rescued).once do |raised|
52
+ expect(raised).to eq _ex_
53
+ end
53
54
 
54
- Pry.new.process_command 'cd-cause', '', b2
55
+ Pry.new.tap{ |p| p.push_binding(b2) }.process_command 'cd-cause'
55
56
  end
56
57
  end
57
58
 
58
59
  describe "cd-cause" do
60
+ context 're-raising with custom Exception' do
61
+ it "should not loop through same context" do
62
+ _ex_ = nil
63
+ e1 = nil
64
+ Pry::rescue do
65
+ begin
66
+ begin
67
+ _b1 = binding
68
+ raise "original"
69
+ rescue => e1
70
+ _b2 = binding
71
+ raise TemplateError.new(e1)
72
+ end
73
+ rescue => e2
74
+ _ex_ = e2
75
+ end
76
+ end
77
+
78
+ expect(PryRescue).to receive(:enter_exception_context).once.with(e1)
79
+
80
+ Pry.new.tap{ |p| p.push_binding(binding) }.process_command 'cd-cause'
81
+ end
82
+ end
83
+
59
84
  it "should enter the next exception's context" do
60
85
  _ex_ = nil
61
86
  e1 = nil
@@ -73,9 +98,10 @@ describe "pry-rescue commands" do
73
98
  end
74
99
  end
75
100
 
76
- PryRescue.should_receive(:enter_exception_context).once.with(e1)
101
+ expect(PryRescue).to receive(:enter_exception_context).once.with(e1)
77
102
 
78
- Pry.new.process_command 'cd-cause', '', binding
103
+ Pry.new.tap{ |p| p.push_binding(binding) }.process_command 'cd-cause'
104
+ # PryTester.new(binding).process_command 'cd-cause'
79
105
  end
80
106
 
81
107
  it "should raise a CommandError if no previous commands" do
@@ -88,9 +114,9 @@ describe "pry-rescue commands" do
88
114
  _ex_ = e1
89
115
  end
90
116
 
91
- lambda{
92
- Pry.new.process_command 'cd-cause', '', binding
93
- }.should raise_error Pry::CommandError, /No previous exception/
117
+ expect {
118
+ Pry.new.tap{ |p| p.push_binding(binding) }.process_command 'cd-cause'
119
+ }.to raise_error Pry::CommandError, /No previous exception/
94
120
  end
95
121
 
96
122
  it "should raise a CommandError on a re-raise" do
@@ -107,15 +133,15 @@ describe "pry-rescue commands" do
107
133
  end
108
134
  _rescued_ = _ex_
109
135
 
110
- lambda{
111
- Pry.new.process_command 'cd-cause', '', binding
112
- }.should raise_error Pry::CommandError, /No previous exception/
136
+ expect {
137
+ Pry.new.tap{ |p| p.push_binding(binding) }.process_command 'cd-cause'
138
+ }.to raise_error Pry::CommandError, /No previous exception/
113
139
  end
114
140
 
115
141
  it "should raise a CommandError if not in Pry::rescue" do
116
- lambda{
117
- Pry.new.process_command 'cd-cause', '', binding
118
- }.should raise_error Pry::CommandError, /No previous exception/
142
+ expect {
143
+ Pry.new.tap{ |p| p.push_binding(binding) }.process_command 'cd-cause'
144
+ }.to raise_error Pry::CommandError, /No previous exception/
119
145
  end
120
146
  end
121
147
  end
@@ -2,25 +2,25 @@ require File.expand_path('../../lib/pry-rescue.rb', __FILE__)
2
2
 
3
3
  describe 'Pry.rescue' do
4
4
  it 'should call PryRescue.enter_exception_context' do
5
- lambda{
6
- PryRescue.should_receive(:enter_exception_context).once
5
+ expect(lambda {
6
+ expect(PryRescue).to receive(:enter_exception_context).once
7
7
  Pry::rescue{ raise "foobar" }
8
- }.should raise_error(/foobar/)
8
+ }).to raise_error(/foobar/)
9
9
  end
10
10
 
11
11
  it "should retry on try-again" do
12
12
  @called = 0
13
- PryRescue.should_receive(:enter_exception_context).once{ throw :try_again }
13
+ expect(PryRescue).to receive(:enter_exception_context).once{ throw :try_again }
14
14
  Pry::rescue do
15
15
  @called += 1
16
16
  raise "foobar" if @called == 1
17
17
  end
18
- @called.should == 2
18
+ expect(@called).to be(2)
19
19
  end
20
20
 
21
21
  it "should try-again from innermost block" do
22
22
  @outer = @inner = 0
23
- PryRescue.should_receive(:enter_exception_context).once{ throw :try_again }
23
+ expect(PryRescue).to receive(:enter_exception_context).once{ throw :try_again }
24
24
  Pry::rescue do
25
25
  @outer += 1
26
26
  Pry::rescue do
@@ -29,13 +29,13 @@ describe 'Pry.rescue' do
29
29
  end
30
30
  end
31
31
 
32
- @outer.should == 1
33
- @inner.should == 2
32
+ expect(@outer).to be(1)
33
+ expect(@inner).to be(2)
34
34
  end
35
35
 
36
36
  it "should enter the first occurence of an exception that is re-raised" do
37
- PryRescue.should_receive(:enter_exception_context).once{ |raised| raised.size.should == 1 }
38
- lambda do
37
+ expect(PryRescue).to receive(:enter_exception_context).once{ |raised| raised.size.should == 1 }
38
+ expect(lambda do
39
39
  Pry::rescue do
40
40
  begin
41
41
  raise "first_occurance"
@@ -43,26 +43,26 @@ describe 'Pry.rescue' do
43
43
  raise
44
44
  end
45
45
  end
46
- end.should raise_error(/first_occurance/)
46
+ end).to raise_error(/first_occurance/)
47
47
  end
48
48
 
49
49
  it "should not catch SystemExit" do
50
- PryRescue.should_not_receive(:enter_exception_context)
50
+ expect(PryRescue).to_not receive(:enter_exception_context)
51
51
 
52
- lambda do
52
+ expect(lambda do
53
53
  Pry::rescue do
54
54
  exit
55
55
  end
56
- end.should raise_error SystemExit
56
+ end).to raise_error SystemExit
57
57
  end
58
58
 
59
59
  it 'should not catch Ctrl+C' do
60
- PryRescue.should_not_receive(:enter_exception_context)
61
- lambda do
60
+ expect(PryRescue).to_not receive(:enter_exception_context)
61
+ expect(lambda do
62
62
  Pry::rescue do
63
63
  raise Interrupt, "ctrl+c (fake)"
64
64
  end
65
- end.should raise_error Interrupt
65
+ end).to raise_error Interrupt
66
66
  end
67
67
  end
68
68
 
@@ -72,15 +72,15 @@ describe "Pry.rescued" do
72
72
  begin
73
73
  raise "foo"
74
74
  rescue => e
75
- Pry.should_receive(:warn)
75
+ expect(Pry).to receive(:warn)
76
76
  Pry.rescued(e)
77
77
  end
78
78
  end
79
79
 
80
80
  it "should raise an error if used on an exception not raised" do
81
81
  Pry::rescue do
82
- Pry.should_receive(:warn) do |message|
83
- message.should =~ /^WARNING: Tried to inspect exception outside of Pry::rescue/
82
+ expect(Pry).to receive(:warn) do |message|
83
+ expect(message).to match(/^WARNING: Tried to inspect exception outside of Pry::rescue/)
84
84
  end
85
85
  Pry.rescued(RuntimeError.new("foo").exception)
86
86
  end
@@ -91,7 +91,7 @@ describe "Pry.rescued" do
91
91
  begin
92
92
  raise "foo"
93
93
  rescue => e
94
- PryRescue.should_receive(:enter_exception_context).once
94
+ expect(PryRescue).to receive(:enter_exception_context).once
95
95
  Pry::rescued(e)
96
96
  end
97
97
  end
@@ -0,0 +1,13 @@
1
+ # This Exception Class behaves same as ActionView::Template::Error
2
+ # https://github.com/rails/rails/blob/master/actionview/lib/action_view/template/error.rb#L68
3
+ #
4
+ # It encapsulates an Exception and stores the latest Exception raised in its
5
+ # `cause` attribute
6
+ class TemplateError < StandardError
7
+ attr_reader :cause
8
+
9
+ def initialize(cause)
10
+ @cause = $!
11
+ end
12
+ end
13
+
@@ -6,9 +6,9 @@ describe "PryRescue.peek!" do
6
6
  Pry.config.output = StringIO.new
7
7
  foo = 5
8
8
 
9
- lambda do
9
+ expect(lambda do
10
10
  PryRescue.peek!
11
- end.should change{ foo }.from(5).to(6)
11
+ end).to change{ foo }.from(5).to(6)
12
12
  end
13
13
 
14
14
  # this will fail, or not?
@@ -22,8 +22,8 @@ describe "PryRescue.peek!" do
22
22
 
23
23
  foo = 5
24
24
 
25
- lambda do
25
+ expect(lambda do
26
26
  PryRescue.peek!
27
- end.should change{ foo }.from(5).to(6)
27
+ end).to change{ foo }.from(5).to(6)
28
28
  end
29
29
  end
@@ -2,113 +2,128 @@ 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
- PryRescue.should_receive(:pry).once{ |opts|
8
- opts[:call_stack].first.eval("__FILE__").should end_with('spec/fixtures/simple.rb')
15
+ expect(PryRescue).to receive(:pry).once { |opts|
16
+ expect(opts[:call_stack].first.source_location[0]).to end_with('spec/fixtures/simple.rb')
9
17
  }
10
- lambda{
18
+ expect(lambda {
11
19
  PryRescue.load("spec/fixtures/simple.rb")
12
- }.should raise_error(/simple-exception/)
20
+ }).to raise_error(/simple-exception/)
13
21
  end
14
22
 
15
23
  it "should open above the standard library" do
16
- PryRescue.should_receive(:pry).once do |opts|
17
- opts[:call_stack][opts[:initial_frame]].eval("__FILE__").should end_with('spec/fixtures/uri.rb')
24
+ expect(PryRescue).to receive(:pry).once do |opts|
25
+ expect(opts[:call_stack][opts[:initial_frame]].source_location[0]).to end_with('spec/fixtures/uri.rb')
18
26
  end
19
- lambda{
27
+ expect(lambda{
20
28
  PryRescue.load("spec/fixtures/uri.rb")
21
- }.should raise_error(URI::InvalidURIError)
29
+ }).to raise_error(URI::InvalidURIError)
22
30
  end
23
31
 
24
32
  it "should keep the standard library on the binding stack" do
25
- PryRescue.should_receive(:pry).once do |opts|
26
- opts[:call_stack].first.eval("__FILE__").should start_with(RbConfig::CONFIG['libdir'])
33
+ expect(PryRescue).to receive(:pry).once do |opts|
34
+ expect(opts[:call_stack].first.source_location[0]).to start_with(RbConfig::CONFIG['libdir'])
27
35
  end
28
- lambda{
36
+ expect(lambda{
29
37
  PryRescue.load("spec/fixtures/uri.rb")
30
- }.should raise_error(URI::InvalidURIError)
38
+ }).to raise_error(URI::InvalidURIError)
31
39
  end
32
40
 
33
41
  it "should open above gems" do
34
- PryRescue.should_receive(:pry).once do |opts|
35
- opts[:call_stack][opts[:initial_frame]].eval("__FILE__").should end_with('spec/fixtures/coderay.rb')
42
+ expect(PryRescue).to receive(:pry).once do |opts|
43
+ expect(opts[:call_stack][opts[:initial_frame]].source_location[0]).to end_with('spec/fixtures/coderay.rb')
36
44
  end
37
- lambda{
45
+ expect(lambda{
38
46
  PryRescue.load("spec/fixtures/coderay.rb")
39
- }.should raise_error(ArgumentError)
47
+ }).to raise_error(ArgumentError)
40
48
  end
41
49
 
42
50
  it "should open above gems" do
43
- PryRescue.should_receive(:pry).once do |opts|
51
+ expect(PryRescue).to receive(:pry).once do |opts|
44
52
  coderay_path = Gem::Specification.respond_to?(:detect) ?
45
53
  Gem::Specification.detect{|x| x.name == 'coderay' }.full_gem_path :
46
54
  Gem.all_load_paths.grep(/coderay/).last
47
55
 
48
- opts[:call_stack].first.eval("__FILE__").should start_with(coderay_path)
56
+ expect(opts[:call_stack].first.source_location[0]).to start_with(coderay_path)
49
57
  end
50
- lambda{
58
+ expect(lambda{
51
59
  PryRescue.load("spec/fixtures/coderay.rb")
52
- }.should raise_error(ArgumentError)
60
+ }).to raise_error(ArgumentError)
53
61
  end
54
62
 
55
63
  it "should skip pwd, even if it is a gem (but not vendor stuff)" do
56
- Gem::Specification.stub :any? do true end
57
- PryRescue.send(:user_path?, Dir.pwd + '/asdf.rb').should be_true
58
- PryRescue.send(:user_path?, Dir.pwd + '/vendor/asdf.rb').should be_false
64
+ # Gem::Specification.stub :any? do true end
65
+ allow(Gem::Specification).to receive(:any?).and_return(true)
66
+
67
+ expect(
68
+ PryRescue.send(:user_path?, Dir.pwd + '/asdf.rb')
69
+ ).to be true
70
+
71
+ expect(
72
+ PryRescue.send(:user_path?, Dir.pwd + '/vendor/asdf.rb')
73
+ ).to be false
59
74
  end
60
75
 
61
76
  it "should filter out duplicate stack frames" do
62
- PryRescue.should_receive(:pry).once do |opts|
63
- opts[:call_stack][0].eval("__LINE__").should == 4
64
- opts[:call_stack][1].eval("__LINE__").should == 12
77
+ expect(PryRescue).to receive(:pry).once do |opts|
78
+ expect(opts[:call_stack][0].source_location[1]).to be(4)
79
+ expect(opts[:call_stack][1].source_location[1]).to be(12)
65
80
  end
66
- lambda{
81
+ expect(lambda{
67
82
  PryRescue.load("spec/fixtures/super.rb")
68
- }.should raise_error(/super-exception/)
83
+ }).to raise_error(/super-exception/)
69
84
  end
70
85
 
71
86
  it "should calculate correct initial frame even when duplicates are present" do
72
- PryRescue.should_receive(:pry).once do |opts|
73
- opts[:call_stack][0].eval("__FILE__").should end_with('fake.rb')
74
- opts[:call_stack][opts[:initial_frame]].eval("__FILE__").should end_with('spec/fixtures/initial.rb')
87
+ expect(PryRescue).to receive(:pry).once do |opts|
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')
75
90
  end
76
- lambda{
91
+ expect(lambda{
77
92
  PryRescue.load("spec/fixtures/initial.rb")
78
- }.should raise_error(/no :baz please/)
93
+ }).to raise_error(/no :baz please/)
79
94
  end
80
95
 
81
96
  it "should skip over reraises from within gems" do
82
- PryRescue.should_receive(:pry).once do |opts|
83
- opts[:call_stack][0].eval("__FILE__").should end_with('spec/fixtures/reraise.rb')
97
+ expect(PryRescue).to receive(:pry).once do |opts|
98
+ expect(opts[:call_stack][0].source_location[0]).to end_with('spec/fixtures/reraise.rb')
84
99
  end
85
- lambda{
100
+ expect(lambda{
86
101
  PryRescue.load("spec/fixtures/reraise.rb")
87
- }.should raise_error(/reraise-exception/)
102
+ }).to raise_error(/reraise-exception/)
88
103
  end
89
104
 
90
105
  it "should not skip over independent raises within gems" do
91
- PryRescue.should_receive(:pry).once do |opts|
92
- opts[:call_stack][0].eval("__FILE__").should end_with('fake.rb')
106
+ expect(PryRescue).to receive(:pry).once do |opts|
107
+ expect(opts[:call_stack][0].source_location[0]).to end_with('fake.rb')
93
108
  end
94
- lambda{
109
+ expect(lambda{
95
110
  PryRescue.load("spec/fixtures/raiseother.rb")
96
- }.should raise_error(/raiseother_exception/)
111
+ }).to raise_error(/raiseother_exception/)
97
112
  end
98
113
 
99
114
  it "should output a warning if the exception was not raised" do
100
- PryRescue.should_not_receive(:enter_exception_context)
101
- Pry.should_receive(:warn).once
115
+ expect(PryRescue).to_not receive(:enter_exception_context)
116
+ expect(Pry).to receive(:warn).once
102
117
  Pry.rescued(RuntimeError.new("foo"))
103
118
  end
104
119
  else
105
120
  it "should open at the correct point" do
106
- Pry.should_receive(:start).once{ |binding, h|
107
- binding.eval("__FILE__").should end_with('spec/fixtures/simple.rb')
121
+ expect(Pry).to receive(:start).once { |binding, h|
122
+ expect(binding.source_location[0]).to end_with('spec/fixtures/simple.rb')
108
123
  }
109
- lambda{
124
+ expect(lambda{
110
125
  PryRescue.load("spec/fixtures/simple.rb")
111
- }.should raise_error(/simple-exception/)
126
+ }).to raise_error(/simple-exception/)
112
127
  end
113
128
  end
114
129
  end
@@ -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
@@ -1,6 +1,3 @@
1
1
  require 'rspec'
2
- require 'rspec/autorun'
3
-
4
- require 'pry/test/helper'
5
2
 
6
3
  require './lib/pry-rescue'
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.4.2
4
+ version: 1.5.2
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: 2015-05-06 00:00:00.000000000 Z
13
+ date: 2020-06-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: pry
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: '0'
21
+ version: 0.12.0
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- version: '0'
28
+ version: 0.12.0
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: interception
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -82,20 +82,6 @@ dependencies:
82
82
  - - ">="
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
- - !ruby/object:Gem::Dependency
86
- name: yard
87
- requirement: !ruby/object:Gem::Requirement
88
- requirements:
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- version: '0'
92
- type: :development
93
- prerelease: false
94
- version_requirements: !ruby/object:Gem::Requirement
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- version: '0'
99
85
  - !ruby/object:Gem::Dependency
100
86
  name: redcarpet
101
87
  requirement: !ruby/object:Gem::Requirement
@@ -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
@@ -178,12 +167,15 @@ files:
178
167
  - spec/fixtures/reraise.rb
179
168
  - spec/fixtures/simple.rb
180
169
  - spec/fixtures/super.rb
170
+ - spec/fixtures/template_error.rb
181
171
  - spec/fixtures/uri.rb
182
172
  - spec/peek_spec.rb
183
173
  - spec/pry_rescue_spec.rb
174
+ - spec/source_location_spec.rb
184
175
  - spec/spec_helper.rb
185
176
  homepage: https://github.com/ConradIrwin/pry-rescue
186
- licenses: []
177
+ licenses:
178
+ - MIT
187
179
  metadata: {}
188
180
  post_install_message:
189
181
  rdoc_options: []
@@ -200,10 +192,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
192
  - !ruby/object:Gem::Version
201
193
  version: '0'
202
194
  requirements: []
203
- rubyforge_project:
204
- rubygems_version: 2.2.2
195
+ rubygems_version: 3.1.2
205
196
  signing_key:
206
197
  specification_version: 4
207
198
  summary: Open a pry session on any unhandled exceptions
208
199
  test_files: []
209
- has_rdoc: