Module: JsonapiErrorable

Defined in:
lib/jsonapi_errorable.rb,
lib/jsonapi_errorable/version.rb,
lib/jsonapi_errorable/validatable.rb,
lib/jsonapi_errorable/exception_handler.rb,
lib/jsonapi_errorable/serializers/validation.rb

Defined Under Namespace

Modules: ClassMethods, Serializers, Validatable Classes: ExceptionHandler

Constant Summary collapse

VERSION =
"0.8.0"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.disable!Object



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

def self.disable!
  @enabled = false
end

.disabled?Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/jsonapi_errorable.rb', line 32

def self.disabled?
  @enabled == false
end

.enable!Object



28
29
30
# File 'lib/jsonapi_errorable.rb', line 28

def self.enable!
  @enabled = true
end

.included(klass) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/jsonapi_errorable.rb', line 9

def self.included(klass)
  klass.class_eval do
    class << self
      attr_accessor :_errorable_registry
    end

    def self.inherited(subklass)
      subklass._errorable_registry = self._errorable_registry.dup
    end
  end
  klass._errorable_registry = {}
  klass.send(:include, Validatable)
  klass.extend ClassMethods
end

.loggerObject



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

def self.logger
  @logger ||= defined?(Rails) ? Rails.logger : Logger.new($stdout)
end

.logger=(logger) ⇒ Object



40
41
42
# File 'lib/jsonapi_errorable.rb', line 40

def self.logger=(logger)
  @logger = logger
end

Instance Method Details

#default_exception_handlerObject



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

def default_exception_handler
  self.class.default_exception_handler
end

#handle_exception(e) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/jsonapi_errorable.rb', line 44

def handle_exception(e)
  raise e if JsonapiErrorable.disabled?

  exception_klass = self.class._errorable_registry[e.class] || default_exception_handler.new
  exception_klass.log(e)
  json   = exception_klass.error_payload(e)
  status = exception_klass.status_code(e)
  render json: json, status: status
end

#registered_exception?(e) ⇒ Boolean

Returns:

  • (Boolean)


58
59
60
# File 'lib/jsonapi_errorable.rb', line 58

def registered_exception?(e)
  self.class._errorable_registry.key?(e.class)
end