module DTK::Client::Response::ErrorHandler

Constants

DefaultErrorCode
DefaultErrorMsg
Info
SpecificErrorCodes

Public Class Methods

check_for_session_expiried(response) click to toggle source
# File lib/client/response/error_handler.rb, line 25
def self.check_for_session_expiried(response)
  error_code = nil
  if response && response['errors']
    response['errors'].each do |err|
      error_code = err['code']||(err['errors'] && err['errors'].first['code'])
    end
  end
  (error_code == 'forbidden')
end
error_info?(response, opts = {}) click to toggle source
# File lib/client/response/error_handler.rb, line 40
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       +=  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?
    Logger.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
raise_if_error_info(response) click to toggle source
# File lib/client/response/error_handler.rb, line 21
def self.raise_if_error_info(response)
  Error.raise_if_error_info(response)
end

Private Class Methods

error_info_default() click to toggle source
# File lib/client/response/error_handler.rb, line 92
def self.error_info_default
  Info.new(DefaultErrorMsg, DefaultErrorCode, nil)
end
remove_html_tags(string_with_tags) click to toggle source
# File lib/client/response/error_handler.rb, line 88
def self.remove_html_tags(string_with_tags)
  string_with_tags.gsub(/<\/?[^>]+>/, '')
end