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