class Excon::Error

Excon exception classes

def self.status_error(request, response)

Messages for nicer exceptions, from rfc2616
def self.status_error(request, response)
  error_class, error_message = status_errors[response[:status]]
  if error_class.nil?
    default_class = Excon::Error.const_get(@default_status_error)
    error_class, error_message = [default_class, 'Unknown']
  end
  message = StringIO.new
  str = "Expected(#{request[:expects].inspect}) <=>" +
        " Actual(#{response[:status]} #{error_message})"
  message.puts(str)
  if request[:debug_request]
    message.puts('excon.error.request')
    Excon::PrettyPrinter.pp(message, request)
  end
  if request[:debug_response]
    message.puts('excon.error.response')
    Excon::PrettyPrinter.pp(message, response.data)
  end
  message.rewind
  error_class.new(message.read, request, response)
end

def self.status_errors

def self.status_errors
  @status_errors ||= {
    100 => [Excon::Error::Continue, 'Continue'],
    101 => [Excon::Error::SwitchingProtocols, 'Switching Protocols'],
    200 => [Excon::Error::OK, 'OK'],
    201 => [Excon::Error::Created, 'Created'],
    202 => [Excon::Error::Accepted, 'Accepted'],
    203 => [Excon::Error::NonAuthoritativeInformation, 'Non-Authoritative Information'],
    204 => [Excon::Error::NoContent, 'No Content'],
    205 => [Excon::Error::ResetContent, 'Reset Content'],
    206 => [Excon::Error::PartialContent, 'Partial Content'],
    300 => [Excon::Error::MultipleChoices, 'Multiple Choices'],
    301 => [Excon::Error::MovedPermanently, 'Moved Permanently'],
    302 => [Excon::Error::Found, 'Found'],
    303 => [Excon::Error::SeeOther, 'See Other'],
    304 => [Excon::Error::NotModified, 'Not Modified'],
    305 => [Excon::Error::UseProxy, 'Use Proxy'],
    307 => [Excon::Error::TemporaryRedirect, 'Temporary Redirect'],
    400 => [Excon::Error::BadRequest, 'Bad Request'],
    401 => [Excon::Error::Unauthorized, 'Unauthorized'],
    402 => [Excon::Error::PaymentRequired, 'Payment Required'],
    403 => [Excon::Error::Forbidden, 'Forbidden'],
    404 => [Excon::Error::NotFound, 'Not Found'],
    405 => [Excon::Error::MethodNotAllowed, 'Method Not Allowed'],
    406 => [Excon::Error::NotAcceptable, 'Not Acceptable'],
    407 => [Excon::Error::ProxyAuthenticationRequired, 'Proxy Authentication Required'],
    408 => [Excon::Error::RequestTimeout, 'Request Timeout'],
    409 => [Excon::Error::Conflict, 'Conflict'],
    410 => [Excon::Error::Gone, 'Gone'],
    411 => [Excon::Error::LengthRequired, 'Length Required'],
    412 => [Excon::Error::PreconditionFailed, 'Precondition Failed'],
    413 => [Excon::Error::RequestEntityTooLarge, 'Request Entity Too Large'],
    414 => [Excon::Error::RequestURITooLong, 'Request-URI Too Long'],
    415 => [Excon::Error::UnsupportedMediaType, 'Unsupported Media Type'],
    416 => [Excon::Error::RequestedRangeNotSatisfiable, 'Request Range Not Satisfiable'],
    417 => [Excon::Error::ExpectationFailed, 'Expectation Failed'],
    422 => [Excon::Error::UnprocessableEntity, 'Unprocessable Entity'],
    429 => [Excon::Error::TooManyRequests, 'Too Many Requests'],
    500 => [Excon::Error::InternalServerError, 'InternalServerError'],
    501 => [Excon::Error::NotImplemented, 'Not Implemented'],
    502 => [Excon::Error::BadGateway, 'Bad Gateway'],
    503 => [Excon::Error::ServiceUnavailable, 'Service Unavailable'],
    504 => [Excon::Error::GatewayTimeout, 'Gateway Timeout']
  }
end