Method: ActiveSupport::Rescuable::ClassMethods#rescue_with_handler
- Defined in:
- lib/active_support/rescuable.rb
#rescue_with_handler(exception, object: self, visited_exceptions: []) ⇒ Object
Matches an exception to a handler based on the exception class.
If no handler matches the exception, check for a handler matching the (optional) exception.cause. If no handler matches the exception or its cause, this returns nil, so you can deal with unhandled exceptions. Be sure to re-raise unhandled exceptions if this is what you expect.
begin
# ...
rescue => exception
rescue_with_handler(exception) || raise
end
Returns the exception if it was handled and nil if it was not.
90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/active_support/rescuable.rb', line 90 def rescue_with_handler(exception, object: self, visited_exceptions: []) visited_exceptions << exception if handler = handler_for_rescue(exception, object: object) handler.call exception exception elsif exception if visited_exceptions.include?(exception.cause) nil else rescue_with_handler(exception.cause, object: object, visited_exceptions: visited_exceptions) end end end |