class JsonapiException

Constants

DEFAULT_STATUS
MIME_TYPE
VERSION

Attributes

exception[R]
opts[R]

Public Class Methods

new(exception, opts = {}) click to toggle source
# File lib/jsonapi_exception.rb, line 7
def initialize(exception, opts = {})
  @exception = exception
  @opts      = opts
end

Public Instance Methods

as_json(*_) click to toggle source
# File lib/jsonapi_exception.rb, line 55
def as_json(*_)
  {
    errors: [to_h]
  }
end
code() click to toggle source
# File lib/jsonapi_exception.rb, line 37
def code
  opts[:code]
end
detail() click to toggle source
# File lib/jsonapi_exception.rb, line 25
def detail
  opts.fetch(:detail, exception.message)
end
for_render() click to toggle source
# File lib/jsonapi_exception.rb, line 72
def for_render
  {
    json:         as_json,
    status:       status,
    content_type: MIME_TYPE
  }
end
id() click to toggle source
# File lib/jsonapi_exception.rb, line 33
def id
  opts.fetch(:id, exception.object_id)
end
meta() click to toggle source
# File lib/jsonapi_exception.rb, line 45
def meta
  return opts[:meta] if opts[:meta]
  return unless show_exceptions?
  {
    class:     exception.class.to_s,
    message:   exception.message,
    backtrace: exception.backtrace
  }
end
status() click to toggle source
# File lib/jsonapi_exception.rb, line 29
def status
  opts.fetch(:status, DEFAULT_STATUS)
end
title() click to toggle source
# File lib/jsonapi_exception.rb, line 12
def title
  opts.fetch(:title)
rescue KeyError
  exception
    .class
    .to_s
    .split("::")
    .last
    .scan(/([A-Z][^A-Z]*)/)
    .join(" ")
    .sub(/ (Error|Exception)$/, "")
end
to_h() click to toggle source
# File lib/jsonapi_exception.rb, line 61
def to_h
  {
    title:  title,
    links:  links,
    detail: detail,
    status: status.to_s,
    id:     id,
    code:   code
  }.reject { |_, v| !v }
end

Private Instance Methods

show_exceptions?() click to toggle source
# File lib/jsonapi_exception.rb, line 84
def show_exceptions?
  return false unless defined?(Rails)
  Rails.application.config.action_dispatch.show_exceptions
end