Class: JsonapiErrorable::ExceptionHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/jsonapi_errorable/exception_handler.rb

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ ExceptionHandler

Returns a new instance of ExceptionHandler.



3
4
5
6
7
8
9
# File 'lib/jsonapi_errorable/exception_handler.rb', line 3

def initialize(options = {})
  @status  = options[:status]
  @title   = options[:title]
  @message = options[:message]
  @meta    = options[:meta]
  @log     = options[:log]
end

Instance Method Details

#backtrace_cleanerObject



20
21
22
# File 'lib/jsonapi_errorable/exception_handler.rb', line 20

def backtrace_cleaner
  defined?(Rails) ? Rails.backtrace_cleaner : nil
end

#detail(error) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/jsonapi_errorable/exception_handler.rb', line 28

def detail(error)
  if @message == true
    error.message
  else
    @message ? @message.call(error) : default_detail
  end
end

#error_code(error) ⇒ Object



15
16
17
18
# File 'lib/jsonapi_errorable/exception_handler.rb', line 15

def error_code(error)
  status_code = status_code(error)
  Rack::Utils::SYMBOL_TO_STATUS_CODE.invert[status_code]
end

#error_payload(error) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/jsonapi_errorable/exception_handler.rb', line 41

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) ⇒ Object



57
58
59
60
61
62
63
64
65
66
# File 'lib/jsonapi_errorable/exception_handler.rb', line 57

def log(error)
  return unless log?
  backtrace = error.backtrace

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

  log_error(error, backtrace)
end

#log?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/jsonapi_errorable/exception_handler.rb', line 53

def log?
  @log != false
end

#meta(error) ⇒ Object



36
37
38
39
# File 'lib/jsonapi_errorable/exception_handler.rb', line 36

def meta(error)
  return {} unless @meta.respond_to?(:call)
  @meta.call(error)
end

#status_code(error) ⇒ Object



11
12
13
# File 'lib/jsonapi_errorable/exception_handler.rb', line 11

def status_code(error)
  @status || 500
end

#titleObject



24
25
26
# File 'lib/jsonapi_errorable/exception_handler.rb', line 24

def title
  @title || 'Error'
end