2009-09-14 00:24:22 -04:00
|
|
|
require "fog/parser"
|
2009-08-19 22:10:59 -04:00
|
|
|
|
2009-08-16 16:31:36 -04:00
|
|
|
module Fog
|
|
|
|
module Errors
|
|
|
|
class Continue < StandardError; end # 100
|
|
|
|
class SwitchingProtocols < StandardError; end # 101
|
|
|
|
class OK < StandardError; end # 200
|
|
|
|
class Created < StandardError; end # 201
|
|
|
|
class Accepted < StandardError; end # 202
|
|
|
|
class NonAuthoritativeInformation < StandardError; end # 203
|
|
|
|
class NoContent < StandardError; end # 204
|
|
|
|
class ResetContent < StandardError; end # 205
|
|
|
|
class PartialContent < StandardError; end # 206
|
|
|
|
class MultipleChoices < StandardError; end # 300
|
|
|
|
class MovedPermanently < StandardError; end # 301
|
|
|
|
class Found < StandardError; end # 302
|
|
|
|
class SeeOther < StandardError; end # 303
|
|
|
|
class NotModified < StandardError; end # 304
|
|
|
|
class UseProxy < StandardError; end # 305
|
|
|
|
class TemporaryRedirect < StandardError; end # 307
|
|
|
|
class BadRequest < StandardError; end # 400
|
|
|
|
class Unauthorized < StandardError; end # 401
|
|
|
|
class PaymentRequired < StandardError; end # 402
|
|
|
|
class Forbidden < StandardError; end # 403
|
|
|
|
class NotFound < StandardError; end # 404
|
|
|
|
class MethodNotAllowed < StandardError; end # 405
|
|
|
|
class NotAcceptable < StandardError; end #406
|
|
|
|
class ProxyAuthenticationRequired < StandardError; end #407
|
|
|
|
class RequestTimeout < StandardError; end # 408
|
|
|
|
class Conflict < StandardError; end # 409
|
|
|
|
class Gone < StandardError; end # 410
|
|
|
|
class LengthRequired < StandardError; end # 411
|
|
|
|
class PreconditionFailed < StandardError; end # 412
|
|
|
|
class RequestEntityTooLarge < StandardError; end # 412
|
|
|
|
class RequestURITooLong < StandardError; end # 414
|
|
|
|
class UnsupportedMediaType < StandardError; end # 415
|
|
|
|
class RequestedRangeNotSatisfiable < StandardError; end # 416
|
|
|
|
class ExpectationFailed < StandardError; end # 417
|
|
|
|
class InternalServerError < StandardError; end # 500
|
|
|
|
class NotImplemented < StandardError; end # 501
|
|
|
|
class BadGateway < StandardError; end # 502
|
|
|
|
class ServiceUnavailable < StandardError; end # 503
|
|
|
|
class GatewayTimeout < StandardError; end # 504
|
|
|
|
|
|
|
|
# Messages for nicer exceptions, from rfc2616
|
|
|
|
def self.status_error(expected, actual, response)
|
|
|
|
@errors ||= {
|
|
|
|
100 => Fog::Errors::Continue,
|
|
|
|
101 => Fog::Errors::SwitchingProtocols,
|
|
|
|
200 => Fog::Errors::OK,
|
|
|
|
201 => Fog::Errors::Created,
|
|
|
|
202 => Fog::Errors::Accepted,
|
|
|
|
203 => Fog::Errors::NonAuthoritativeInformation,
|
|
|
|
204 => Fog::Errors::NoContent,
|
|
|
|
205 => Fog::Errors::ResetContent,
|
|
|
|
206 => Fog::Errors::PartialContent,
|
|
|
|
300 => Fog::Errors::MultipleChoices,
|
|
|
|
301 => Fog::Errors::MovedPermanently,
|
|
|
|
302 => Fog::Errors::Found,
|
|
|
|
303 => Fog::Errors::SeeOther,
|
|
|
|
304 => Fog::Errors::NotModified,
|
|
|
|
305 => Fog::Errors::UseProxy,
|
|
|
|
307 => Fog::Errors::TemporaryRedirect,
|
|
|
|
400 => Fog::Errors::BadRequest,
|
|
|
|
401 => Fog::Errors::Unauthorized,
|
|
|
|
402 => Fog::Errors::PaymentRequired,
|
|
|
|
403 => Fog::Errors::Forbidden,
|
|
|
|
404 => Fog::Errors::NotFound,
|
|
|
|
405 => Fog::Errors::MethodNotAllowed,
|
|
|
|
406 => Fog::Errors::NotAcceptable,
|
|
|
|
407 => Fog::Errors::ProxyAuthenticationRequired,
|
|
|
|
408 => Fog::Errors::RequestTimeout,
|
|
|
|
409 => Fog::Errors::Conflict,
|
|
|
|
410 => Fog::Errors::Gone,
|
|
|
|
411 => Fog::Errors::LengthRequired,
|
|
|
|
412 => Fog::Errors::PreconditionFailed,
|
|
|
|
413 => Fog::Errors::RequestEntityTooLarge,
|
|
|
|
414 => Fog::Errors::RequestURITooLong,
|
|
|
|
415 => Fog::Errors::UnsupportedMediaType,
|
|
|
|
416 => Fog::Errors::RequestedRangeNotSatisfiable,
|
|
|
|
417 => Fog::Errors::ExpectationFailed,
|
|
|
|
500 => Fog::Errors::InternalServerError,
|
|
|
|
501 => Fog::Errors::NotImplemented,
|
|
|
|
502 => Fog::Errors::BadGateway,
|
|
|
|
503 => Fog::Errors::ServiceUnavailable,
|
|
|
|
504 => Fog::Errors::GatewayTimeout
|
|
|
|
}
|
|
|
|
@messages ||= {
|
|
|
|
100 => 'Continue',
|
|
|
|
101 => 'Switching Protocols',
|
|
|
|
200 => 'OK',
|
|
|
|
201 =>'Created',
|
|
|
|
202 => 'Accepted',
|
|
|
|
203 => 'Non-Authoritative Information',
|
|
|
|
204 => 'No Content',
|
|
|
|
205 => 'Reset Content',
|
|
|
|
206 => 'Partial Content',
|
|
|
|
300 => 'Multiple Choices',
|
|
|
|
301 => 'Moved Permanently',
|
|
|
|
302 => 'Found',
|
|
|
|
303 => 'See Other',
|
|
|
|
304 => 'Not Modified',
|
|
|
|
305 => 'Use Proxy',
|
|
|
|
307 => 'Temporary Redirect',
|
|
|
|
400 => 'Bad Request',
|
|
|
|
401 => 'Unauthorized',
|
|
|
|
402 => 'Payment Required',
|
|
|
|
403 => 'Forbidden',
|
|
|
|
404 => 'Not Found',
|
|
|
|
405 => 'Method Not Allowed',
|
|
|
|
406 => 'Not Acceptable',
|
|
|
|
407 => 'Proxy Authentication Required',
|
|
|
|
408 => 'Request Timeout',
|
|
|
|
409 => 'Conflict',
|
|
|
|
410 => 'Gone',
|
|
|
|
411 => 'Length Required',
|
|
|
|
412 => 'Precondition Failed',
|
|
|
|
413 => 'Request Entity Too Large',
|
|
|
|
414 => 'Request-URI Too Long',
|
|
|
|
415 => 'Unsupported Media Type',
|
|
|
|
416 => 'Requested Range Not Satisfiable',
|
|
|
|
417 => 'Expectation Failed',
|
|
|
|
500 => 'Internal Server Error',
|
|
|
|
501 => 'Not Implemented',
|
|
|
|
502 => 'Bad Gateway',
|
|
|
|
503 => 'Service Unavailable',
|
|
|
|
504 => 'Gateway Timeout'
|
|
|
|
}
|
2009-08-19 22:10:59 -04:00
|
|
|
response = "#{response.body['Code']} => #{response.body['Message']}"
|
|
|
|
@errors[actual].new("Expected(#{expected} #{@messages[expected]}) <=> Actual(#{actual} #{@messages[actual]}): #{response}")
|
|
|
|
end
|
|
|
|
|
|
|
|
class Parser < Fog::Parsers::Base
|
|
|
|
|
|
|
|
def end_element(name)
|
|
|
|
case name
|
|
|
|
when 'Code', 'Message'
|
|
|
|
@response[name] = @value
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2009-08-16 16:31:36 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|