Sha256: 00e64c9bb44bfadba5a623fa266ed5751f645b0d7de6d49cafc7d21badb1f027

Contents?: true

Size: 983 Bytes

Versions: 17

Compression:

Stored size: 983 Bytes

Contents

module Duracloud
  class ErrorHandler
    def self.call(response)
      new(response).call
    end

    attr_reader :response

    def initialize(response)
      @response = response # XXX dup?
    end

    def call
      message = response_has_error_message? ? response.body : status_message
      raise handle_status, message
    end

    def status_message
      [response.status, response.reason].join(' ')
    end

    def server_error?
      response.status >= 500
    end

    def handle_status
      send("handle_#{response.status}")
    rescue NoMethodError
      server_error? ? handle_server_error : handle_default
    end

    def handle_server_error
      ServerError
    end

    def handle_default
      Error
    end

    def handle_400
      BadRequestError
    end

    def handle_404
      NotFoundError
    end

    def handle_409
      ConflictError
    end

    def response_has_error_message?
      response.plain_text? && response.has_body?
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
duracloud-client-0.9.1 lib/duracloud/error_handler.rb
duracloud-client-0.9.0 lib/duracloud/error_handler.rb
duracloud-client-0.8.0 lib/duracloud/error_handler.rb
duracloud-client-0.7.2 lib/duracloud/error_handler.rb
duracloud-client-0.7.1 lib/duracloud/error_handler.rb
duracloud-client-0.7.0 lib/duracloud/error_handler.rb
duracloud-client-0.6.0 lib/duracloud/error_handler.rb
duracloud-client-0.5.0 lib/duracloud/error_handler.rb
duracloud-client-0.4.0 lib/duracloud/error_handler.rb
duracloud-client-0.3.0 lib/duracloud/error_handler.rb
duracloud-client-0.2.0 lib/duracloud/error_handler.rb
duracloud-client-0.1.5 lib/duracloud/error_handler.rb
duracloud-client-0.1.4 lib/duracloud/error_handler.rb
duracloud-client-0.1.3 lib/duracloud/error_handler.rb
duracloud-client-0.1.2 lib/duracloud/error_handler.rb
duracloud-client-0.1.1 lib/duracloud/error_handler.rb
duracloud-client-0.1.0 lib/duracloud/error_handler.rb