class JsonapiErrorable::ExceptionHandler
Attributes
show_raw_error[RW]
Public Class Methods
new(options = {})
click to toggle source
# File lib/jsonapi_errorable/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/jsonapi_errorable/exception_handler.rb, line 22 def backtrace_cleaner defined?(Rails) ? Rails.backtrace_cleaner : nil end
detail(error)
click to toggle source
# File lib/jsonapi_errorable/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/jsonapi_errorable/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/jsonapi_errorable/exception_handler.rb, line 53 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/jsonapi_errorable/exception_handler.rb, line 69 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/jsonapi_errorable/exception_handler.rb, line 65 def log? @log != false end
meta(error)
click to toggle source
# File lib/jsonapi_errorable/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, backtrace: error.backtrace } end end end
status_code(error)
click to toggle source
# File lib/jsonapi_errorable/exception_handler.rb, line 13 def status_code(error) @status || 500 end
title()
click to toggle source
# File lib/jsonapi_errorable/exception_handler.rb, line 26 def title @title || 'Error' end
Private Instance Methods
default_detail()
click to toggle source
# File lib/jsonapi_errorable/exception_handler.rb, line 91 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/jsonapi_errorable/exception_handler.rb, line 82 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/jsonapi_errorable/exception_handler.rb, line 87 def logger JsonapiErrorable.logger end