Module: Pakyow::Routing::Behavior::ErrorHandling::API

Defined in:
lib/pakyow/routing/controller/behavior/error_handling.rb

Instance Method Summary collapse

Instance Method Details

#handle(name_exception_or_code, as: nil, &block) ⇒ Object

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

Examples:

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

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

Handling by status code:

handle 500 do
  # build and send a response
end

default do
  trigger 500
end

Handling by status name:

handle :forbidden do
  # build and send a response
end

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

Handling an exception:

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

default do
  raise Sequel::NoMatchingRow
end


136
137
138
139
140
141
142
143
144
# 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