Class: CMDx::MiddlewareRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/cmdx/middleware_registry.rb

Overview

Registry for managing middleware components in a task execution chain.

The MiddlewareRegistry maintains an ordered list of middleware components that can be inserted, removed, and executed in sequence. Each middleware can be configured with specific options and is executed in the order they were registered.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(registry = []) ⇒ MiddlewareRegistry

Initialize a new middleware registry.

Examples:

registry = MiddlewareRegistry.new
registry = MiddlewareRegistry.new([[MyMiddleware, {option: 'value'}]])

Parameters:

  • registry (Array) (defaults to: [])

    Initial array of middleware entries



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

def initialize(registry = [])
  @registry = registry
end

Instance Attribute Details

#registryArray<Array> (readonly) Also known as: to_a

Returns the ordered collection of middleware entries.

Examples:

registry.registry # => [[LoggingMiddleware, {level: :debug}], [AuthMiddleware, {}]]

Returns:

  • (Array<Array>)

    Array of middleware-options pairs



20
21
22
# File 'lib/cmdx/middleware_registry.rb', line 20

def registry
  @registry
end

Instance Method Details

#call!(task) {|task| ... } ⇒ Object

Execute the middleware chain for a given task.

Examples:

result = registry.call!(my_task) do |processed_task|
  processed_task.execute
end

Parameters:

  • task (Object)

    The task object to process through middleware

Yields:

  • (task)

    Block to execute after all middleware processing

Yield Parameters:

  • task (Object)

    The processed task object

Returns:

  • (Object)

    Result of the block execution

Raises:

  • (ArgumentError)

    When no block is provided



100
101
102
103
104
# File 'lib/cmdx/middleware_registry.rb', line 100

def call!(task, &)
  raise ArgumentError, "block required" unless block_given?

  recursively_call_middleware(0, task, &)
end

#deregister(middleware) ⇒ MiddlewareRegistry

Remove a middleware component from the registry.

Examples:

registry.deregister(LoggingMiddleware)

Parameters:

  • middleware (Object)

    The middleware object to remove

Returns:



78
79
80
81
# File 'lib/cmdx/middleware_registry.rb', line 78

def deregister(middleware)
  registry.reject! { |mw, _opts| mw == middleware }
  self
end

#dupMiddlewareRegistry

Create a duplicate of the registry with duplicated middleware entries.

Examples:

new_registry = registry.dup

Returns:



44
45
46
# File 'lib/cmdx/middleware_registry.rb', line 44

def dup
  self.class.new(registry.map(&:dup))
end

#register(middleware, at: -1,, **options) ⇒ MiddlewareRegistry

Register a middleware component in the registry.

Examples:

registry.register(LoggingMiddleware, at: 0, log_level: :debug)
registry.register(AuthMiddleware, at: -1, timeout: 30)

Parameters:

  • middleware (Object)

    The middleware object to register

  • at (Integer) (defaults to: -1,)

    Position to insert the middleware (default: -1, end of list)

  • options (Hash)

    Configuration options for the middleware

Options Hash (**options):

  • :key (Symbol)

    Configuration key for the middleware

  • :value (Object)

    Configuration value for the middleware

Returns:



63
64
65
66
# File 'lib/cmdx/middleware_registry.rb', line 63

def register(middleware, at: -1, **options)
  registry.insert(at, [middleware, options])
  self
end