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