module Kraftwerk::Endpoint::ErrorHandling

Public Class Methods

prepended(base) click to toggle source
# File lib/kraftwerk/endpoint/error_handling.rb, line 22
def self.prepended(base)
  base.class_eval do
    class_attribute :exception_handlers
    self.exception_handlers = {}
    extend ClassMethods
  end
end

Public Instance Methods

call(params) click to toggle source
Calls superclass method
# File lib/kraftwerk/endpoint/error_handling.rb, line 4
def call(params)
  begin
    super
  rescue => exception
    if self.class.exception_handlers.key?(exception.class)
      handler = self.class.exception_handlers[exception.class]
      message = handler[:message].respond_to?(:call) ? handler[:message].call(exception) : handler[:message]
      unless message.is_a?(Kraftwerk::Response)
        message = Kraftwerk::Response.new(code: handler[:code], body: { error: message })
      end
      message
      # todo call app expection handler somehow
    else
      raise exception
    end
  end
end