class SafetyGoggles::Handler

Constants

ERROR_CODES
SEVERITIES

Public Class Methods

get_backtrace(error) click to toggle source
# File lib/safety_goggles/handler.rb, line 59
def self.get_backtrace(error)
  return [] unless error.respond_to?(:backtrace)
  return [] if error.backtrace.nil?

  error.backtrace.reject { |line| %r{/gems/}.match(line).present? }
end
guess_env() click to toggle source
# File lib/safety_goggles/handler.rb, line 72
def self.guess_env
  return Rails.env if defined?(Rails) && Rails.respond_to?(:env)

  "development"
end
handle_error(error, env = Handler.guess_env) click to toggle source
# File lib/safety_goggles/handler.rb, line 25
def self.handle_error(error, env = Handler.guess_env)
  logger.debug("::handle_error called with #{error}, #{env}")
  code = ERROR_CODES.fetch(error.class.to_s, 500) if code.nil?

  logger.error("ERROR: #{code} \n#{error.class} \n#{error}")
  logger.error(get_backtrace(error).join("\n"))

  handle_serious_error(error, code, env) if serious_env?

  code
end
handle_serious_error(error, code, env) click to toggle source

:nocov:

# File lib/safety_goggles/handler.rb, line 38
def self.handle_serious_error(error, code, env)
  logger.debug("::handle_serious_error called with #{error}, #{code}, #{env}")
  severity = SEVERITIES.fetch(code, "warning")

  Raven.capture_exception(error,
                          extra: { nice_backtrace: get_backtrace(error) },
                          level: severity,
                          tags:  { code: code, class: error.class })
end
logger() click to toggle source
# File lib/safety_goggles/handler.rb, line 66
def self.logger
  return Rails.logger if defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger.present?

  Logger.new(STDOUT)
end
serious_env?() click to toggle source

:nocov:

# File lib/safety_goggles/handler.rb, line 49
def self.serious_env?
  return false unless defined?(Rails)

  # :nocov:
  # rubocop:disable Rails/UnknownEnv
  Rails.env.production? || Rails.env.staging?
  # rubocop:enable Rails/UnknownEnv
  # :nocov:
end