lib/active_support/rescuable.rb in activesupport-5.1.0 vs lib/active_support/rescuable.rb in activesupport-5.1.1

- old
+ new

@@ -82,15 +82,21 @@ # rescue => exception # rescue_with_handler(exception) || raise # end # # Returns the exception if it was handled and +nil+ if it was not. - def rescue_with_handler(exception, object: self) + 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 - rescue_with_handler(exception.cause, object: object) + if visited_exceptions.include?(exception.cause) + nil + else + rescue_with_handler(exception.cause, object: object, visited_exceptions: visited_exceptions) + end end end def handler_for_rescue(exception, object: self) #:nodoc: case rescuer = find_rescue_handler(exception)