Sha256: 423a0df1b9c438fa78c273dbb481744d17f47ebcb2915b3de3d676b9a61d03e9

Contents?: true

Size: 1.4 KB

Versions: 16

Compression:

Stored size: 1.4 KB

Contents

require "delegate"

module Jess
  class HttpClient
    # Wraps a Net::HTTP object to provide exception handling around the
    # `request` method, such that 400 and 500 error codes are translated into
    # appropriate Jess::HttpClient::Error exceptions.
    #
    class ErrorDecorator < SimpleDelegator
      def request(req)
        res = super
        raise_if_error_code(res)
        res
      rescue StandardError => e
        handle_exception(e, req, res)
      end

      private

      def raise_if_error_code(res)
        return if res.is_a?(Net::HTTPSuccess)
        raise BadCredentials, res.message if res.code == "401"
        raise NotFound, res.message if res.code == "404"
        raise ServerError, res.message if res.is_a?(Net::HTTPServerError)

        raise Error, res.message
      end

      def handle_exception(err, req, res)
        case err
        when IOError, Timeout::Error
          err = ConnectionError.new(err.message)
        when Error
          # pass
        else
          err = Error.new(err.inspect)
        end

        fill_exception(err, req, res)
        raise err
      end

      def fill_exception(err, req, res)
        err.uri = req.uri
        err.http_method = req.method
        return if res.nil?

        err.code = res.code

        begin
          err.response = res.body.to_s
        rescue StandardError
          err.response = nil
        end
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
jess-1.4.3 lib/jess/http_client/error_decorator.rb
jess-1.4.2 lib/jess/http_client/error_decorator.rb
jess-1.4.1 lib/jess/http_client/error_decorator.rb
jess-1.4.0 lib/jess/http_client/error_decorator.rb
jess-1.3.2 lib/jess/http_client/error_decorator.rb
jess-1.3.1 lib/jess/http_client/error_decorator.rb
jess-1.3.0 lib/jess/http_client/error_decorator.rb
jess-1.2.5 lib/jess/http_client/error_decorator.rb
jess-1.2.4 lib/jess/http_client/error_decorator.rb
jess-1.2.3 lib/jess/http_client/error_decorator.rb
jess-1.2.2 lib/jess/http_client/error_decorator.rb
jess-1.2.1 lib/jess/http_client/error_decorator.rb
jess-1.2.0 lib/jess/http_client/error_decorator.rb
jess-1.1.3 lib/jess/http_client/error_decorator.rb
jess-1.1.2 lib/jess/http_client/error_decorator.rb
jess-1.1.1 lib/jess/http_client/error_decorator.rb