Class: Capsium::Package::DependencyResolver

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(store) ⇒ DependencyResolver

Returns a new instance of DependencyResolver.

Parameters:

  • store (Store, String, nil)


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

#storeStore (readonly)

Returns the value of attribute store.

Returns:



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.

Parameters:

  • guid (String)
  • range (String)
  • chain: (Array[String] chain)

Returns:

  • (String)


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