def process_error_response(response, url=nil)
messages = []
parse_error = nil
begin
result = RHC::Json.decode(response)
messages = Array(result['messages'])
rescue => e
logger.debug "Response did not include a message from server: #{e.message}" if @debug
parse_error = generic_error(url)
end
case response.code
when 401
raise UnAuthorizedException, "Not authenticated"
when 403
messages.each do |message|
if message['severity'].upcase == "ERROR"
raise RequestDeniedException, message['text']
end
end
raise RequestDeniedException.new("Forbidden")
when 404
messages.each do |message|
if message['severity'].upcase == "ERROR"
raise ResourceNotFoundException, message['text']
end
end
raise ResourceNotFoundException.new(url)
when 409
messages.each do |message|
if message['severity'] and message['severity'].upcase == "ERROR"
raise ValidationException, message['text']
end
end
when 422
e = nil
messages.each do |message|
if e and e.field == message["field"]
e.message << " #{message["text"]}"
else
e = ValidationException.new(message["text"], message["field"], message["code"])
end
end
raise e || parse_error || ValidationException.new('Not valid')
when 400
messages.each do |message|
if message['severity'].upcase == "ERROR"
raise ClientErrorException, message['text']
end
end
when 500
messages.each do |message|
if message['severity'].upcase == "ERROR"
raise ServerErrorException.new(message['text'], message["exit_code"] ? message["exit_code"].to_i : nil)
end
end
when 503
messages.each do |message|
if message['severity'].upcase == "ERROR"
raise ServiceUnavailableException, message['text']
end
end
raise ServiceUnavailableException
else
raise ServerErrorException, "Server returned an unexpected error code: #{response.code}"
end
raise parse_error || generic_error(url)
end