module Cb::ResponseValidator
Public Class Methods
validate(response)
click to toggle source
# File lib/cb/utils/validator.rb, line 17 def validate(response) raise_response_code_errors(response) process_response_body(response) end
Private Class Methods
error_message(processed_response)
click to toggle source
# File lib/cb/utils/validator.rb, line 67 def error_message(processed_response) return '' if processed_response.empty? find_errors_node(processed_response) || '' end
fail_with_error_details(response, error_type)
click to toggle source
# File lib/cb/utils/validator.rb, line 33 def fail_with_error_details(response, error_type) processed_response = process_response_body(response) error = error_type.new(error_message(processed_response)) error.code = response.code rescue nil error.raw_response = response error.response = processed_response raise error end
find_errors_node(processed_response)
click to toggle source
# File lib/cb/utils/validator.rb, line 72 def find_errors_node(processed_response) nested_hash = processed_response[processed_response.keys.first] processed_response['errors'] || processed_response['Errors'] || nested_hash['errors'] || nested_hash['Errors'] end
process_response_body(response)
click to toggle source
# File lib/cb/utils/validator.rb, line 46 def process_response_body(response) body = response.response.body rescue nil return {} unless body return {} if body.include?('<!DOCTYPE html') if response.code != 200 try_parse_json(body) || try_parse_xml(body) || {} end
raise_response_code_errors(response)
click to toggle source
# File lib/cb/utils/validator.rb, line 24 def raise_response_code_errors(response) code = response.code rescue nil fail_with_error_details(response, Cb::ServiceUnavailableError) if code == 503 || simulate_auth_outage? fail_with_error_details(response, Cb::UnauthorizedError) if [401, 403].include?(code) fail_with_error_details(response, Cb::DocumentNotFoundError) if code == 404 fail_with_error_details(response, Cb::BadRequestError) if code && code >= 400 && code < 500 fail_with_error_details(response, Cb::ServerError) if code && code >= 500 end
simulate_auth_outage?()
click to toggle source
# File lib/cb/utils/validator.rb, line 42 def simulate_auth_outage? ENV['SIMULATE_AUTH_OUTAGE'].to_s.downcase == 'true' end
try_parse_json(body)
click to toggle source
# File lib/cb/utils/validator.rb, line 55 def try_parse_json(body) JSON.parse(body) rescue JSON::ParserError nil end
try_parse_xml(body)
click to toggle source
# File lib/cb/utils/validator.rb, line 61 def try_parse_xml(body) MultiXml.parse(body, KeepRoot: true) rescue MultiXml::ParseError nil end