Sha256: 8d3c2ab4360f4b2952570ca21e17749de9fddfc4679b757990203f7f992a9e12

Contents?: true

Size: 1.39 KB

Versions: 2

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

module Aws::SessionStore::DynamoDB::Errors
  # This class handles errors raised from DynamoDB.
  class DefaultHandler < Aws::SessionStore::DynamoDB::Errors::BaseHandler
    # Array of errors that will always be passed up the Rack stack.
    HARD_ERRORS = [
      Aws::DynamoDB::Errors::ResourceNotFoundException,
      Aws::DynamoDB::Errors::ConditionalCheckFailedException,
      Aws::SessionStore::DynamoDB::Errors::MissingSecretKeyError,
      Aws::SessionStore::DynamoDB::Errors::LockWaitTimeoutError
    ].freeze

    # Determines behavior of DefaultErrorHandler
    # @param [true] raise_errors Pass all errors up the Rack stack.
    def initialize(raise_errors)
      super()
      @raise_errors = raise_errors
    end

    # Raises {HARD_ERRORS} up the Rack stack.
    # Places all other errors in Racks error stream.
    def handle_error(error, env = {})
      raise error if HARD_ERRORS.include?(error.class) || @raise_errors

      store_error(error, env)
      false
    end

    # Sends error to error stream
    def store_error(error, env = {})
      env['rack.errors'].puts(errors_string(error)) if env
    end

    # Returns string to be placed in error stream
    def errors_string(error)
      str = []
      str << "Exception occurred: #{error.message}"
      str << 'Stack trace:'
      str += error.backtrace.map { |l| "  #{l}" }
      str.join("\n")
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
aws-sessionstore-dynamodb-3.0.1 lib/aws/session_store/dynamo_db/errors/default_handler.rb
aws-sessionstore-dynamodb-3.0.0 lib/aws/session_store/dynamo_db/errors/default_handler.rb