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
# File 'lib/jsonapi_errorable/exception_handler.rb', line 3

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

Instance Method Details

#backtrace_cleanerObject



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

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

#detail(error) ⇒ Object



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

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

#error_code(error) ⇒ Object



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

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

#error_payload(error) ⇒ Object



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

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



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

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)


51
52
53
# File 'lib/jsonapi_errorable/exception_handler.rb', line 51

def log?
  @log != false
end

#meta(error) ⇒ Object



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

def meta(error)
  {}
end

#status_code(error) ⇒ Object



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

def status_code(error)
  @status || 500
end

#titleObject



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

def title
  @title || 'Error'
end