module Pry
Additional methods provided by pry-rescue.
Public Class Methods
enable_rescuing!(block=nil)
click to toggle source
Allow Pry::rescued(e)
to work at any point in your program.
@example
Pry::enable_rescuing! begin raise "foo" rescue => e Pry::rescued(e) end
# 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)
click to toggle source
Start a pry session on any unhandled exceptions within this block.
@example
Pry::rescue do raise "foo" end
@return [Object] The return value of the block
# 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=$!)
click to toggle source
Start a pry session on an exception that you rescued within a Pry::rescue
{ }.
@example
Pry::rescue do begin raise "foo" rescue => e Pry::rescued(e) end end
# 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
Private Class Methods
with_rescuing(&block)
click to toggle source
Ensure that Interception is active while running this block
@param [Proc] block the block
# File lib/pry-rescue/core_ext.rb, line 88 def with_rescuing(&block) if @rescuing block.call else begin @rescuing = true enable_rescuing!(block) ensure @rescuing = false end end end