class Coach::MiddlewareValidator

Attributes

previous_middlewares[R]

Public Class Methods

new(middleware, previous_middlewares = [], already_provided = []) click to toggle source
# File lib/coach/middleware_validator.rb, line 7
def initialize(middleware, previous_middlewares = [], already_provided = [])
  @middleware = middleware
  @previous_middlewares = previous_middlewares.clone
  @already_provided = already_provided
end

Public Instance Methods

validated_provides!() click to toggle source

Aggregates provided keys from the given middleware, and all the middleware it uses. Can raise at any level assuming a used middleware is missing a required dependency.

# File lib/coach/middleware_validator.rb, line 15
def validated_provides!
  if missing_requirements.any?
    raise Coach::Errors::MiddlewareDependencyNotMet.new(
      @middleware, @previous_middlewares, missing_requirements
    )
  end

  @middleware.provided + provided_by_chain
end

Private Instance Methods

middleware_dependencies() click to toggle source
# File lib/coach/middleware_validator.rb, line 43
def middleware_dependencies
  @middleware_dependencies ||= @middleware.middleware_dependencies.map(&:middleware)
end
missing_requirements() click to toggle source
# File lib/coach/middleware_validator.rb, line 29
def missing_requirements
  @middleware.requirements - provided_by_chain
end
provided_by_chain() click to toggle source
# File lib/coach/middleware_validator.rb, line 33
def provided_by_chain
  @provided_by_chain ||= begin
    initial = [@already_provided, @previous_middlewares]
    middleware_dependencies.reduce(initial) do |(provided, previous), middleware|
      validator = self.class.new(middleware, previous, provided)
      [provided + validator.validated_provides!, previous + [middleware]]
    end.first.flatten.uniq
  end
end