module Pakyow::Routing::Behavior::ErrorHandling::API

Public Instance Methods

handle(name_exception_or_code, as: nil, &block) click to toggle source

Registers an error handler used within a controller or request lifecycle.

@example Defining for a controller:

Pakyow::Application.controller do
  handle 500 do
    # build and send a response for `request.error`
  end

  default do
    # do something that might cause an error
  end
end

@example Defining for a request lifecycle:

Pakyow::Application.controller do
  default do
    handle 500 do
      # build and send a response for `request.error`
    end

    # do something that might cause an error
  end
end

@example Handling by status code:

handle 500 do
  # build and send a response
end

default do
  trigger 500
end

@example Handling by status name:

handle :forbidden do
  # build and send a response
end

default do
  trigger 403 # or, `trigger :forbidden`
end

@example Handling an exception:

handle Sequel::NoMatchingRow, as: 404 do
  # build and send a response
end

default do
  raise Sequel::NoMatchingRow
end
# File lib/pakyow/routing/controller/behavior/error_handling.rb, line 136
def handle(name_exception_or_code, as: nil, &block)
  if name_exception_or_code.is_a?(Class) && name_exception_or_code.ancestors.include?(Exception)
    raise ArgumentError, "status code is required" if as.nil?
    (@exceptions[name_exception_or_code] ||= []) << [Connection::Statuses.code(as), block]
  else
    status_code = Connection::Statuses.code(name_exception_or_code)
    (@handlers[status_code] ||= []) << [as || status_code, block]
  end
end