class DependencyManager::Resolver

Resolves a factories dependencies against the currently loaded dependency list. Checks for potential missing dependencies and reconciles against optional and required dependencies.

Public Class Methods

new(factory:, loaded_dependencies:) click to toggle source

Creates a new Resolver

@param factory: [Factory]

Factory instance

@param loaded_dependencies: [Hash[Symbol, Any]]

Map of currently loaded dependencies

@return [Resolver]

# File lib/dependency_manager/resolver.rb, line 18
def initialize(factory:, loaded_dependencies:)
  @factory = factory
  @loaded_dependencies = loaded_dependencies
end

Public Instance Methods

resolve() click to toggle source

Resolves dependencies from the currently loaded dependencies

@raise [MissingDependencies]

When there are missing dependencies required by the current factory
that will prevent the factory from building

@return [Hash[Symbol, Any]]

Dependencies necessary to build the factory
# File lib/dependency_manager/resolver.rb, line 31
def resolve
  # Resolve required dependencies from our current list
  resolved_dependencies = @loaded_dependencies.slice(*@factory.dependencies)
  required_dependencies = @factory.required_dependencies

  # But check if there are a few missing. Optional dependencies not included in this
  missing_dependencies = required_dependencies.reject do |dependency_name|
    !!resolved_dependencies[dependency_name]
  end

  if missing_dependencies.any?
    error = missing_dependencies.join(', ')
    raise MissingDependencies, "Dependencies for `#{@factory.const_name}` are not present: #{error}"
  end

  resolved_dependencies
end