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, with a registry as install fallback for store misses.
Instance Attribute Summary collapse
-
#registry ⇒ Capsium::Registry?
readonly
Returns the value of attribute registry.
-
#store ⇒ Store
readonly
Returns the value of attribute store.
Instance Method Summary collapse
-
#initialize(store, registry: nil) ⇒ DependencyResolver
constructor
A new instance of DependencyResolver.
-
#resolve_path(guid, range, chain:) ⇒ String
The newest store .cap satisfying the dependency, installing from the configured registry on a store miss and raising typed errors for circular, missing or unsatisfiable dependencies.
Constructor Details
#initialize(store, registry: nil) ⇒ DependencyResolver
Returns a new instance of DependencyResolver.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/capsium/package/dependency_resolver.rb', line 38 def initialize(store, registry: nil) 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) @registry = if registry.nil? || registry.is_a?(Capsium::Registry) registry else Capsium::Registry.fetch(registry) end @registry ||= Capsium::Registry.default end |
Instance Attribute Details
#registry ⇒ Capsium::Registry? (readonly)
Returns the value of attribute registry.
36 37 38 |
# File 'lib/capsium/package/dependency_resolver.rb', line 36 def registry @registry end |
#store ⇒ Store (readonly)
Returns the value of attribute store.
36 37 38 |
# File 'lib/capsium/package/dependency_resolver.rb', line 36 def store @store end |
Instance Method Details
#resolve_path(guid, range, chain:) ⇒ String
The newest store .cap satisfying the dependency, installing from the configured registry on a store miss and raising typed errors for circular, missing or unsatisfiable dependencies.
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/capsium/package/dependency_resolver.rb', line 61 def resolve_path(guid, range, chain:) if chain.include?(guid) raise CircularDependencyError, "circular dependency: #{(chain + [guid]).join(' -> ')}" end @store.find(guid, range) rescue DependencyNotFoundError => e resolve_from_registry(guid, range, e) end |