module DTK::Client::Response::ErrorHandler

Constants

DefaultErrorCode
DefaultErrorMsg
Info
SpecificErrorCodes

Public Class Methods

error_info?(response, opts={}) click to toggle source
# File lib/domain/response/error_handler.rb, line 34
def self.error_info?(response, opts={})
  unless errors = response["errors"]
    return (opts[:default_error_if_nil] && error_info_default())
  end

  # special rare case
  errors = errors.first["errors"] if errors.is_a?(Array) && errors.first["errors"]

  error_msg       = ""
  error_internal  = nil
  error_backtrace = nil
  error_code      = nil
  error_on_server = nil

  #TODO:  below just 'captures' first error
  errors.each do |err|
    error_msg       +=  err["message"] unless err["message"].nil?
    error_msg       +=  err["error"]   unless err["error"].nil?
    error_msg       +=  OsUtil.remove_html_tags(err["original_exception"].to_s) unless err["original_exception"].nil?
    error_on_server = true unless err["on_client"]
    error_code      = err["code"]||(err["errors"] && err["errors"].first["code"])
    error_internal  ||= (err["internal"] or error_code == "not_found") #"not_found" code is at Ramaze level; so error_internal not set
    error_backtrace ||= err["backtrace"]
  end

  # in case we could not parse error lets log error info
  if error_msg.empty?
    DtkLogger.instance.error("Error info could not be extracted from following response: " + response.to_s)
  end

  # normalize it for display
  error_msg = error_msg.empty? ? DefaultErrorMsg : "#{error_msg}"

  unless error_code and SpecificErrorCodes.include?(error_code)
    error_code =
      if error_internal
        error_on_server ? :server_error : :client_error
      else
        DefaultErrorCode
      end
  end

  error_code = error_code.to_sym
  Info.new(error_msg,error_code,error_backtrace)
end
error_info_default() click to toggle source
# File lib/domain/response/error_handler.rb, line 80
def self.error_info_default()
  Info.new(DefaultErrorMsg,DefaultErrorCode,nil)
end