class GraphitiErrors::ExceptionHandler

Attributes

show_raw_error[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/graphiti_errors/exception_handler.rb, line 5
def initialize(options = {})
  @status  = options[:status]
  @title   = options[:title]
  @message = options[:message]
  @meta    = options[:meta]
  @log     = options[:log]
end

Public Instance Methods

backtrace_cleaner() click to toggle source
# File lib/graphiti_errors/exception_handler.rb, line 22
def backtrace_cleaner
  defined?(Rails) ? Rails.backtrace_cleaner : nil
end
detail(error) click to toggle source
# File lib/graphiti_errors/exception_handler.rb, line 30
def detail(error)
  if @message == true
    error.message
  else
    @message ? @message.call(error) : default_detail
  end
end
error_code(error) click to toggle source
# File lib/graphiti_errors/exception_handler.rb, line 17
def error_code(error)
  status_code = status_code(error)
  Rack::Utils::SYMBOL_TO_STATUS_CODE.invert[status_code]
end
error_payload(error) click to toggle source
# File lib/graphiti_errors/exception_handler.rb, line 54
def error_payload(error)
  {
    errors: [
      code: error_code(error),
      status: status_code(error).to_s,
      title: title,
      detail: detail(error),
      meta: meta(error),
    ],
  }
end
log(error) click to toggle source
# File lib/graphiti_errors/exception_handler.rb, line 70
def log(error)
  return unless log?
  backtrace = error.backtrace

  if (cleaner = backtrace_cleaner)
    backtrace = cleaner.clean(backtrace)
  end

  log_error(error, backtrace)
end
log?() click to toggle source
# File lib/graphiti_errors/exception_handler.rb, line 66
def log?
  @log != false
end
meta(error) click to toggle source
# File lib/graphiti_errors/exception_handler.rb, line 38
def meta(error)
  {}.tap do |meta_payload|
    if @meta.respond_to?(:call)
      meta_payload.merge!(@meta.call(error))
    end

    if show_raw_error
      meta_payload[:__raw_error__] = {
        message: error.message,
        debug: error.instance_variable_get(:@__graphiti_debug),
        backtrace: error.backtrace,
      }
    end
  end
end
status_code(error) click to toggle source
# File lib/graphiti_errors/exception_handler.rb, line 13
def status_code(error)
  @status || 500
end
title() click to toggle source
# File lib/graphiti_errors/exception_handler.rb, line 26
def title
  @title || "Error"
end

Private Instance Methods

default_detail() click to toggle source
# File lib/graphiti_errors/exception_handler.rb, line 92
def default_detail
  "We've notified our engineers and hope to address this issue shortly."
end
log_error(e, backtrace) click to toggle source
# File lib/graphiti_errors/exception_handler.rb, line 83
def log_error(e, backtrace)
  logger.error "\033[31mERROR: #{e.class}: #{e.message}\033[0m"
  logger.error "\033[31m#{backtrace.join("\n")}\033[0m"
end
logger() click to toggle source
# File lib/graphiti_errors/exception_handler.rb, line 88
def logger
  GraphitiErrors.logger
end