Sha256: 14de58a91e1e3e92e707f2c5a6688865956b51f5ccee6a0bd6f70cbff6d73310

Contents?: true

Size: 1.89 KB

Versions: 29

Compression:

Stored size: 1.89 KB

Contents

module Pwwka
  module ErrorHandlers
    # Given a chain of error handlers, calls them until either
    # one returns false/aborts or we exhaust the chain of handlers
    class Chain
      include Pwwka::Logging
      def initialize(default_handler_chain=[])
        @error_handlers = default_handler_chain
      end
      def handle_error(message_handler_klass,receiver,queue_name,payload,delivery_info,exception)
        logf "Error Processing Message in %{message_handler_klass} due to %{exception} from payload '%{payload}'", at: :error, message_handler_klass: message_handler_klass, exception: exception.message, payload: payload
        if message_handler_klass.respond_to?(:error_handler)
          @error_handlers.unshift(message_handler_klass.send(:error_handler))
        end
        @error_handlers.reduce(true) { |keep_going,error_handler|
          begin
            logf "%{error_handler_class} is being evaluated as part of pwwka's error-handling chain", error_handler_class: error_handler
            if keep_going
              keep_going = error_handler.new.handle_error(receiver,queue_name,payload,delivery_info,exception)
              if keep_going
                logf "%{error_handler_class} has asked to continue pwwka's error-handling chain", error_handler_class: error_handler
              else
                logf "%{error_handler_class} has halted pwwka's error-handling chain", error_handler_class: error_handler
              end
            else
              logf "Skipping %{error_handler_class} as we were asked to abort pwwka's error-handling chain", error_handler_class: error_handler
            end
            keep_going
          rescue StandardError => exception
            logf "'%{error_handler_class}' aborting due to unhandled exception '%{exception}'", at: :fatal, error_handler_class: error_handler, exception: exception
            false
          end
        }
      end
    end
  end
end

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
pwwka-1.0.0 lib/pwwka/error_handlers/chain.rb
pwwka-1.0.0.RC1 lib/pwwka/error_handlers/chain.rb
pwwka-0.24.0 lib/pwwka/error_handlers/chain.rb
pwwka-0.23.0 lib/pwwka/error_handlers/chain.rb
pwwka-0.22.7 lib/pwwka/error_handlers/chain.rb
pwwka-0.22.7.RC lib/pwwka/error_handlers/chain.rb
pwwka-0.23.0.RC2 lib/pwwka/error_handlers/chain.rb
pwwka-0.22.6 lib/pwwka/error_handlers/chain.rb
pwwka-0.23.RC1 lib/pwwka/error_handlers/chain.rb
pwwka-0.22.5 lib/pwwka/error_handlers/chain.rb
pwwka-0.22.4 lib/pwwka/error_handlers/chain.rb
pwwka-0.22.3 lib/pwwka/error_handlers/chain.rb
pwwka-0.22.2 lib/pwwka/error_handlers/chain.rb
pwwka-0.21.3 lib/pwwka/error_handlers/chain.rb
pwwka-0.22.2.RC4 lib/pwwka/error_handlers/chain.rb
pwwka-0.22.2.RC3 lib/pwwka/error_handlers/chain.rb
pwwka-0.22.2.RC2 lib/pwwka/error_handlers/chain.rb
pwwka-0.22.0.RC2 lib/pwwka/error_handlers/chain.rb
pwwka-0.22.0.RC lib/pwwka/error_handlers/chain.rb
pwwka-0.21.2 lib/pwwka/error_handlers/chain.rb