handler_for_rescue (ActiveSupport::Rescuable)

    # File lib/active_support/rescuable.rb, line 78
        def handler_for_rescue(exception)
          # We go from right to left because pairs are pushed onto rescue_handlers
          # as rescue_from declarations are found.
          _, rescuer = Array(rescue_handlers).reverse.detect do |klass_name, handler|
            # The purpose of allowing strings in rescue_from is to support the
            # declaration of handler associations for exception classes whose
            # definition is yet unknown.
            #
            # Since this loop needs the constants it would be inconsistent to
            # assume they should exist at this point. An early raised exception
            # could trigger some other handler and the array could include
            # precisely a string whose corresponding constant has not yet been
            # seen. This is why we are tolerant to unknown constants.
            #
            # Note that this tolerance only matters if the exception was given as
            # a string, otherwise a NameError will be raised by the interpreter
            # itself when rescue_from CONSTANT is executed.
            klass = self.class.const_get(klass_name) rescue nil
            klass ||= klass_name.constantize rescue nil
            exception.is_a?(klass) if klass
          end

          case rescuer
          when Symbol
            method(rescuer)
          when Proc
            rescuer.bind(self)
          end
        end