Class: Pry
- Inherits:
-
Object
- Object
- Pry
- Defined in:
- lib/pry-rescue/core_ext.rb
Overview
Additional methods provided by pry-rescue.
Class Method Summary collapse
-
.enable_rescuing!(block = nil) ⇒ Object
Allow Pry::rescued(e) to work at any point in your program.
-
.rescue(&block) ⇒ Object
Start a pry session on any unhandled exceptions within this block.
-
.rescued(e = $!) ⇒ Object
Start a pry session on an exception that you rescued within a Pry::rescue{ }.
Class Method Details
.enable_rescuing!(block = nil) ⇒ Object
Allow Pry::rescued(e) to work at any point in your program.
73 74 75 76 77 78 79 80 81 |
# File 'lib/pry-rescue/core_ext.rb', line 73 def enable_rescuing!(block=nil) Interception.listen(block) do |exception, binding| bindings = binding.respond_to?(:callers) ? binding.callers : [binding] unless exception.instance_variable_defined?(:@rescue_bindings) exception.instance_variable_set(:@rescue_bindings, bindings) exception.instance_variable_set(:@rescue_cause, $!) end end end |
.rescue(&block) ⇒ Object
Start a pry session on any unhandled exceptions within this block.
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/pry-rescue/core_ext.rb', line 11 def rescue(&block) loop do catch(:try_again) do begin return with_rescuing(&block) rescue Exception => e rescued e unless SystemExit === e || SignalException === e raise e end end end end |
.rescued(e = $!) ⇒ Object
Start a pry session on an exception that you rescued within a Pry::rescue{ }.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/pry-rescue/core_ext.rb', line 35 def rescued(e=$!) if e.instance_variable_defined?(:@rescue_bindings) PryRescue.enter_exception_context(e) else stack = '' stack = "\n" + e.backtrace.join("\n") if e.backtrace case e when SystemStackError # Interception cannot reliably interept SystemStackErrors as it needs # to call a function at the point the stack runs out. # We use a special error message here, as it seems nicer to assume that # the user knows what they are doing, and it's the software that's # terrible. warn "WARNING: Insufficient stack space to inspect exception" + stack else # We used to raise an exception at this point, but that turned out to # not be very helpful as it obscured the original cause of the problem. # I considered adding an explicit 'raise e' here, but decided against # it on the grounds that the Pry::rescued call is normally in someone # else's error handler already. warn "WARNING: Tried to inspect exception outside of Pry::rescue{ }" + \ stack end end end |