Module: Otto::Core::LifecycleHooks

Included in:
Otto
Defined in:
lib/otto/core/lifecycle_hooks.rb

Overview

Lifecycle hooks module for registering callbacks at various points in request processing. Provides the public API for request completion callbacks.

Instance Method Summary collapse

Instance Method Details

#on_request_complete {|request, response, duration| ... } ⇒ self

Register a callback to be executed after each request completes

Instance-level request completion callbacks allow each Otto instance to have its own isolated set of callbacks, preventing duplicate invocations in multi-app architectures (e.g., Rack::URLMap).

The callback receives three arguments:

  • request: Rack::Request object

  • response: Rack::Response object (wrapping the response tuple)

  • duration: Request processing duration in microseconds

Examples:

Basic usage

otto = Otto.new(routes_file)
otto.on_request_complete do |req, res, duration|
  logger.info "Request completed", path: req.path, duration: duration
end

Multi-app architecture

# App 1: Core Web Application
core_router = Otto.new
core_router.on_request_complete do |req, res, duration|
  logger.info "Core app request", path: req.path
end

# App 2: API Application
api_router = Otto.new
api_router.on_request_complete do |req, res, duration|
  logger.info "API request", path: req.path
end

# Each callback only fires for its respective Otto instance

Yields:

  • (request, response, duration)

    Block to execute after each request

Yield Parameters:

  • request (Rack::Request)

    The request object

  • response (Rack::Response)

    The response object

  • duration (Integer)

    Duration in microseconds

Returns:

  • (self)

    Returns self for method chaining

Raises:

  • (FrozenError)

    if called after configuration is frozen



48
49
50
51
52
# File 'lib/otto/core/lifecycle_hooks.rb', line 48

def on_request_complete(&block)
  ensure_not_frozen!
  @request_complete_callbacks << block if block_given?
  self
end

#request_complete_callbacksArray<Proc>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Get registered request completion callbacks (for internal use)

Returns:

  • (Array<Proc>)

    Array of registered callback blocks



58
59
60
# File 'lib/otto/core/lifecycle_hooks.rb', line 58

def request_complete_callbacks
  @request_complete_callbacks
end