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.

Supports copy-on-write semantics: a duped registry shares the parent’s data until a write operation triggers materialization.

Instance Method Summary collapse

Constructor Details

#initialize(registry = nil) ⇒ MiddlewareRegistry

Initialize a new middleware registry.

Examples:

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

Parameters:

  • registry (Array, nil) (defaults to: nil)

    Initial array of middleware entries

Rbs:

  • (?Array[Array]? registry) -> void



24
25
26
# File 'lib/cmdx/middleware_registry.rb', line 24

def initialize(registry = nil)
  @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

Rbs:

  • (untyped task) { (untyped) -> untyped } -> untyped



109
110
111
112
113
# File 'lib/cmdx/middleware_registry.rb', line 109

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:

Rbs:

  • (untyped middleware) -> self



85
86
87
88
89
90
# File 'lib/cmdx/middleware_registry.rb', line 85

def deregister(middleware)
  materialize!

  @registry.reject! { |mw, _opts| mw == middleware }
  self
end

#initialize_dup(source) ⇒ Object

Sets up copy-on-write state when duplicated via dup.

Parameters:

Rbs:

  • (MiddlewareRegistry source) -> void



33
34
35
36
37
# File 'lib/cmdx/middleware_registry.rb', line 33

def initialize_dup(source)
  @parent = source
  @registry = nil
  super
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:

Rbs:

  • (untyped middleware, ?at: Integer, **untyped options) -> self



68
69
70
71
72
73
# File 'lib/cmdx/middleware_registry.rb', line 68

def register(middleware, at: -1, **options)
  materialize!

  @registry.insert(at, [middleware, options])
  self
end

#registryArray<Array> Also known as: to_a

Returns the ordered collection of middleware entries. Delegates to the parent registry when not yet materialized.

Examples:

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

Returns:

  • (Array<Array>)

    Array of middleware-options pairs

Rbs:



48
49
50
# File 'lib/cmdx/middleware_registry.rb', line 48

def registry
  @registry || @parent.registry
end