Sha256: 81d7b2833cd80f7f0832fbf0278455561da3b2feda1d2552825df2b909385269

Contents?: true

Size: 1.4 KB

Versions: 68

Compression:

Stored size: 1.4 KB

Contents

module Fog
  module AWS
    module Errors
      def self.match_error(error)
        if !Fog::AWS.json_response?(error.response)
          matchers = [
            lambda {|s| s.match(/(?:.*<Code>(.*)<\/Code>)(?:.*<Message>(.*)<\/Message>)/m)},
            lambda {|s| s.match(/.*<(.+Exception)>(?:.*<Message>(.*)<\/Message>)/m)}
          ]
          [error.message, error.response.body].each(&Proc.new {|s|
              matchers.each do |matcher|
                match = matcher.call(s)
                return {:code => match[1].split('.').last, :message => match[2]} if match
              end
            })
        else
          begin
            full_msg_error = Fog::JSON.decode(error.response.body)
            if (full_msg_error.has_key?('Message') || full_msg_error.has_key?('message')) &&
                (error.response.headers.has_key?('x-amzn-ErrorType') || full_msg_error.has_key?('__type'))
              matched_error = {
                :code    => full_msg_error['__type'] || error.response.headers['x-amzn-ErrorType'].split(':').first,
                :message => full_msg_error['Message'] || full_msg_error['message']
              }
              return matched_error
            end
          rescue Fog::JSON::DecodeError => e
            Fog::Logger.warning("Error parsing response json - #{e}")
          end
        end
        {} # we did not match the message or response body
      end
    end
  end
end

Version data entries

68 entries across 66 versions & 3 rubygems

Version Path
fog-aws-3.30.0 lib/fog/aws/errors.rb
fog-aws-3.29.0 lib/fog/aws/errors.rb
fog-aws-3.28.0 lib/fog/aws/errors.rb
fog-aws-3.27.0 lib/fog/aws/errors.rb
fog-aws-3.26.0 lib/fog/aws/errors.rb
fog-aws-3.25.0 lib/fog/aws/errors.rb
fog-aws-3.24.0 lib/fog/aws/errors.rb
fog-aws-3.23.0 lib/fog/aws/errors.rb
fog-aws-3.22.0 lib/fog/aws/errors.rb
fog-aws-3.21.1 lib/fog/aws/errors.rb
fog-aws-3.21.0 lib/fog/aws/errors.rb
fog-aws-3.20.0 lib/fog/aws/errors.rb
fog-aws-3.19.0 lib/fog/aws/errors.rb
fog-aws-3.18.0 lib/fog/aws/errors.rb
fog-aws-3.17.0 lib/fog/aws/errors.rb
fog-aws-3.16.0 lib/fog/aws/errors.rb
fog-aws-3.15.0 lib/fog/aws/errors.rb
fog-aws-3.14.0 lib/fog/aws/errors.rb
fog-aws-3.13.0 lib/fog/aws/errors.rb
fog-aws-3.12.0 lib/fog/aws/errors.rb