class Jess::HttpClient::ErrorDecorator

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.

Public Instance Methods

request(req) click to toggle source
Calls superclass method
# File lib/jess/http_client/error_decorator.rb, line 10
def request(req)
  res = super
  raise_if_error_code(res)
  res
rescue StandardError => e
  handle_exception(e, req, res)
end

Private Instance Methods

fill_exception(err, req, res) click to toggle source
# File lib/jess/http_client/error_decorator.rb, line 43
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
handle_exception(err, req, res) click to toggle source
# File lib/jess/http_client/error_decorator.rb, line 29
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
raise_if_error_code(res) click to toggle source
# File lib/jess/http_client/error_decorator.rb, line 20
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