Sha256: b7589bfce3cd77e99ea449117f62327ab34f0dc6e42e345f664557f3f39e0384

Contents?: true

Size: 1.67 KB

Versions: 37

Compression:

Stored size: 1.67 KB

Contents

require 'multi_xml'

module Aws
  module Xml
    class ErrorHandler < Seahorse::Client::Handler

      def call(context)
        @handler.call(context).on(300..599) do |response|
          response.error = error(context)
          response.data = nil
        end
      end

      private

      def error(context)
        if empty_body?(context)
          error_code = empty_body_error_code(context)
          error_message = ''
        else
          error_code, error_message = extract_error(context)
        end
        svc = context.client.class.name.split('::')[1]
        errors_module = Aws.const_get(svc).const_get(:Errors)
        errors_module.error_class(error_code).new(context, error_message)
      end

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

      def empty_body_error_code(context)
        status_code = context.http_response.status_code
        {
          302 => 'MovedTemporarily',
          304 => 'NotModified',
          400 => 'BadRequest',
          403 => 'Forbidden',
          404 => 'NotFound',
          412 => 'PreconditionFailed',
        }[status_code] || "Http#{status_code}Error"
      end

      def extract_error(context)
        error = MultiXml.parse(context.http_response.body_contents)
        %w(Response ErrorResponse Errors Error).each do |wrapper|
          error = error[wrapper] if error[wrapper]
        end
        [remove_prefix(context, error['Code']), error['Message']]
      end

      def remove_prefix(context, error_code)
        if prefix = context.config.api.metadata('errorPrefix')
          error_code.sub(/^#{prefix}/, '')
        else
          error_code
        end
      end

    end
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
aws-sdk-core-2.0.30 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.29 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.28 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.27 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.26 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.25 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.24 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.23 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.22 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.21 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.20 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.19 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.18 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.17 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.16 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.15 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.14 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.13 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.12 lib/aws-sdk-core/xml/error_handler.rb
aws-sdk-core-2.0.11 lib/aws-sdk-core/xml/error_handler.rb