lib/fog/rackspace.rb in fog-maestrodev-1.7.0.20121114190951 vs lib/fog/rackspace.rb in fog-maestrodev-1.8.0.20130109172219
- old
+ new
@@ -4,39 +4,48 @@
module Rackspace
extend Fog::Provider
module Errors
class ServiceError < Fog::Errors::Error
- attr_reader :response_data
+ attr_reader :response_data, :status_code
+ def to_s
+ status_code ? "[HTTP #{status_code}] #{super}" : super
+ end
+
def self.slurp(error)
- if error.response.body.empty?
- data = nil
- message = nil
- else
- data = Fog::JSON.decode(error.response.body)
- message = data['message']
+ data = nil
+ message = nil
+ status_code = nil
+
+ if error.response
+ status_code = error.response.status
+ unless error.response.body.empty?
+ data = Fog::JSON.decode(error.response.body)
+ message = data.values.first ? data.values.first['message'] : data['message']
+ end
end
-
+
new_error = super(error, message)
new_error.instance_variable_set(:@response_data, data)
+ new_error.instance_variable_set(:@status_code, status_code)
new_error
end
end
class InternalServerError < ServiceError; end
class Conflict < ServiceError; end
class NotFound < ServiceError; end
class ServiceUnavailable < ServiceError; end
class BadRequest < ServiceError
- #TODO - Need to find a bette way to print out these validation errors when they are thrown
+ #TODO - Need to find a better way to print out these validation errors when they are thrown
attr_reader :validation_errors
def self.slurp(error)
new_error = super(error)
- unless new_error.response_data.nil?
- new_error.instance_variable_set(:@validation_errors, new_error.response_data['validationErrors'])
+ unless new_error.response_data.nil? or new_error.response_data['badRequest'].nil?
+ new_error.instance_variable_set(:@validation_errors, new_error.response_data['badRequest']['validationErrors'])
end
new_error
end
end
end