Class: Capsium::Package::DependencyResolver
- Inherits:
-
Object
- Object
- Capsium::Package::DependencyResolver
- Defined in:
- lib/capsium/package/dependency_resolver.rb,
sig/capsium/package/dependency_resolver.rbs
Overview
Orchestrates metadata.dependencies resolution against a package store: circularity checks plus store lookup.
Instance Attribute Summary collapse
-
#store ⇒ Store
readonly
Returns the value of attribute store.
Instance Method Summary collapse
-
#initialize(store) ⇒ DependencyResolver
constructor
A new instance of DependencyResolver.
-
#resolve_path(guid, range, chain:) ⇒ String
The newest store .cap satisfying the dependency, raising typed errors for circular, missing or unsatisfiable dependencies.
Constructor Details
#initialize(store) ⇒ DependencyResolver
Returns a new instance of DependencyResolver.
36 37 38 39 40 41 42 43 44 |
# File 'lib/capsium/package/dependency_resolver.rb', line 36 def initialize(store) if store.nil? raise DependencyError, "metadata.dependencies declared but no package store " \ "configured (set CAPSIUM_STORE or pass store:)" end @store = store.is_a?(Store) ? store : Store.new(store.to_s) end |
Instance Attribute Details
#store ⇒ Store (readonly)
Returns the value of attribute store.
34 35 36 |
# File 'lib/capsium/package/dependency_resolver.rb', line 34 def store @store end |
Instance Method Details
#resolve_path(guid, range, chain:) ⇒ String
The newest store .cap satisfying the dependency, raising typed errors for circular, missing or unsatisfiable dependencies.
51 52 53 54 55 56 57 58 |
# File 'lib/capsium/package/dependency_resolver.rb', line 51 def resolve_path(guid, range, chain:) if chain.include?(guid) raise CircularDependencyError, "circular dependency: #{(chain + [guid]).join(' -> ')}" end @store.find(guid, range) end |