Sha256: 529a53e389eacd97135c1d1e25bc11628ad4ff624968d871426b71dfaa313feb

Contents?: true

Size: 1.2 KB

Versions: 5

Compression:

Stored size: 1.2 KB

Contents

module Awsum
  class Error < StandardError
    attr_reader :response_code, :code, :message, :request_id, :additional

    def initialize(response)
      @response_code = response.code
      parser = ErrorParser.new
      parser.parse(response.body)
      @code = parser.code
      @message = parser.message
      @request_id = parser.request_id
      @additional = parser.additional
    end

    def inspect
      "#<Awsum::Error response_code=#{@response_code} code=#{@code} request_id=#{@request_id} message=#{@message}>"
    end

  private
    class ErrorParser < Awsum::Parser #:nodoc:
      attr_reader :code, :message, :request_id, :additional

      def initialize
        @additional = {}
        @text = ""
      end

      def tag_start(tag, attributes)
      end

      def text(text)
        @text << text unless @text.nil?
      end

      def tag_end(tag)
        text = @text.strip
        return if text.blank?

        case tag
          when 'Code'
            @code = text
          when 'Message'
            @message = text
          when 'RequestID', 'RequestId'
            @request_id = text
          else
            @additional[tag] = text
        end
        @text = ''
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
awsum-0.5.4 lib/awsum/error.rb
awsum-0.5.3 lib/awsum/error.rb
awsum-0.5.2 lib/awsum/error.rb
awsum-0.5.1 lib/awsum/error.rb
awsum-0.5 lib/awsum/error.rb