class DTK::Client::Error

Constants

GENERIC_ERROR_RETURN_CODE
NO_BACKTRACE

Public Class Methods

new(msg = '', opts = {}) click to toggle source

opts can have keys

:backtrace - if want backtrace of nested error
Calls superclass method
# File lib/client/error.rb, line 24
def initialize(msg = '', opts = {})
  super(msg)
  @backtrace = opts[:backtrace] 
end
raise_if_error_info(response, opts = {}) click to toggle source
# File lib/client/error.rb, line 63
def self.raise_if_error_info(response, opts = {})
  # check for errors in response
  error = response.error_info?(opts)
  return unless error
  
  # if error_internal.first == true
  case error.code
      when :unauthorized
    raise self, "[UNAUTHORIZED] Your session has been suspended, please log in again."
  when :session_timeout
    raise self, "[SESSION TIMEOUT] Your session has been suspended, please log in again."
  when :broken
    raise self, "[BROKEN] Unable to connect to the DTK server at host: #{Config[:server_host]}"
  when :forbidden
    raise self, "[FORBIDDEN] Access not granted, please log in again."
  when :timeout
    raise self, "[TIMEOUT ERROR] Server is taking too long to respond."
  when :connection_refused
    raise self, "[CONNECTION REFUSED] Connection refused by server."
  when :resource_not_found
    raise self, "[RESOURCE NOT FOUND] #{error.msg}"
  when :pg_error
    raise self, "[PG_ERROR] #{error.msg}"
  when :server_error
    # Unless explicit backtrace given we dont want to use as backtace where error detected on client
    raise Server.new(error.msg, :backtrace => NO_BACKTRACE)
  when :client_error
    raise Client.new(error.msg, :backtrace => error.backtrace)
  else
    # if usage error occurred, display message to console and display that same message to log
    raise Usage.new(error.msg)
  end
end
top_level_trap_error() { || ... } click to toggle source

returns return code

# File lib/client/error.rb, line 31
def self.top_level_trap_error(&body)
  begin
    yield
  rescue InvalidConnection => e
    e.print_warning
    puts "\nDTK will now exit. Please set up your connection properly and try again."
    GENERIC_ERROR_RETURN_CODE
  rescue Error => e
    # If vanilla error treat like client error
    if e.class == Error
      e = convert_to_client_error(e)
    end
    Logger.instance.error_pp(e.message, e.backtrace?)
    GENERIC_ERROR_RETURN_CODE
  rescue Exception => exception
    # If treat like client error
    e = convert_to_client_error(exception)
    Logger.instance.error_pp(e.message, e.backtrace?)
    GENERIC_ERROR_RETURN_CODE
  end
end

Private Class Methods

convert_to_client_error(e) click to toggle source
# File lib/client/error.rb, line 99
def self.convert_to_client_error(e)
  Client.new(e.message, :backtrace => e.backtrace)
end

Public Instance Methods

backtrace?() click to toggle source
# File lib/client/error.rb, line 55
def backtrace?
  if @backtrace
    @backtrace unless @backtrace == NO_BACKTRACE
  else
    backtrace
  end
end