Sha256: 3126b2e7db9bb949a0bd43df5b839a1247ade83f71538d8c834e1b9634012977
Contents?: true
Size: 1.67 KB
Versions: 1
Compression:
Stored size: 1.67 KB
Contents
module DependencyManager # Resolves a factories dependencies against the currently loaded dependency # list. Checks for potential missing dependencies and reconciles against # optional and required dependencies. class Resolver # If dependencies are not present class MissingDependencies < ArgumentError; end # Creates a new Resolver # # @param factory: [Factory] # Factory instance # # @param loaded_dependencies: [Hash[Symbol, Any]] # Map of currently loaded dependencies # # @return [Resolver] def initialize(factory:, loaded_dependencies:) @factory = factory @loaded_dependencies = loaded_dependencies end # 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 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 end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dependency_manager-0.0.1 | lib/dependency_manager/resolver.rb |