Module: DTK::Client::Response::ErrorHandler

Defined in:
lib/domain/response/error_handler.rb

Defined Under Namespace

Classes: Info

Constant Summary collapse

SpecificErrorCodes =
[:unauthorized,:session_timeout,:broken,:forbidden,:timeout,:connection_refused,:resource_not_found,:pg_error]
DefaultErrorCode =
:error
DefaultErrorMsg =
'Internal DTK Client error, please try again'

Class Method Summary collapse

Class Method Details

.error_info?(response, opts = {}) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# 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_defaultObject



80
81
82
# File 'lib/domain/response/error_handler.rb', line 80

def self.error_info_default()
  Info.new(DefaultErrorMsg,DefaultErrorCode,nil)
end