Sha256: e81a9cac1740681a5e16e3a75885a73e961a1dfd3eb5294afabbd44678b658ef

Contents?: true

Size: 1.2 KB

Versions: 2

Compression:

Stored size: 1.2 KB

Contents

module Aws
  # @api private
  class ErrorHandler

    def initialize(parser)
      @parser = parser
    end

    attr_accessor :handler

    def call(context)
      @handler.call(context).on_status(300..599) do |response|
        if empty_body?(response)
          error_code = error_code_for_empty_response(response)
          error_message = ''
        else
          error_code, error_message = @parser.extract_error(response)
        end
        response.error = error(context, error_code, error_message)
        response.data = nil
      end
    end

    private

    def error(context, code, message)
      svc_class_name = context.config.api.metadata['service_class_name']
      klass = Errors.error_class(svc_class_name, code)
      Errors.error_class(svc_class_name, code).new(context, message)
    end

    def empty_body?(response)
      response.http_response.body_contents.empty?
    end

    def error_code_for_empty_response(response)
      error_code = response.http_response.status_code
      {
        302 => 'MovedTemporarily',
        304 => 'NotModified',
        400 => 'BadRequest',
        403 => 'Forbidden',
        404 => 'NotFound',
      }[error_code] || "#{error_code}Error"
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
aws-sdk-core-2.0.0.rc2 lib/aws/error_handler.rb
aws-sdk-core-2.0.0.rc1 lib/aws/error_handler.rb