class Coach::MiddlewareItem

Attributes

middleware[RW]
parent[RW]

Public Class Methods

new(middleware, config = {}) click to toggle source
# File lib/coach/middleware_item.rb, line 10
def initialize(middleware, config = {})
  @middleware = middleware
  @config_value = config
end

Public Instance Methods

build_middleware(context, successor) click to toggle source
# File lib/coach/middleware_item.rb, line 15
def build_middleware(context, successor)
  @middleware.
    new(context,
        successor&.instrument,
        config)
end
config() click to toggle source

Generates config by either cloning our given config (if it's a hash) else if a lambda value, then will compute the config by calling the lambda with this middlewares parent config.

# File lib/coach/middleware_item.rb, line 40
def config
  @config ||= lambda_config? ? @config_value.call(parent.config) : @config_value.clone
end
set_parent(parent) click to toggle source

Assigns the parent for this middleware, allowing config inheritance rubocop:disable Naming/AccessorMethodName

# File lib/coach/middleware_item.rb, line 30
def set_parent(parent)
  @parent = parent

  self
end
validate!() click to toggle source

Runs validation against the middleware chain, raising if any unmet dependencies are discovered.

# File lib/coach/middleware_item.rb, line 24
def validate!
  MiddlewareValidator.new(middleware).validated_provides!
end

Private Instance Methods

lambda_config?() click to toggle source
# File lib/coach/middleware_item.rb, line 46
def lambda_config?
  @config_value.respond_to?(:call)
end