Class: Build::Dependency::Chain

Inherits:
Resolver
  • Object
show all
Defined in:
lib/build/dependency/chain.rb,
lib/build/dependency/partial_chain.rb

Overview

A chain of dependencies that are resolved from a set of providers.

Instance Attribute Summary collapse

Attributes inherited from Resolver

#conflicts, #ordered, #provisions, #resolved, #unresolved

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dependencies, providers, selection = []) ⇒ Chain

Initialize a dependency chain.



31
32
33
34
35
36
37
38
39
# File 'lib/build/dependency/chain.rb', line 31

def initialize(dependencies, providers, selection = [])
  super()
  
  @selection = ::Set.new(selection)
  @dependencies = dependencies.collect{|dependency| Depends[dependency]}
  @providers = providers
  
  expand_top
end

Instance Attribute Details

#dependenciesObject (readonly)



45
46
47
# File 'lib/build/dependency/chain.rb', line 45

def dependencies
  @dependencies
end

#providersObject (readonly)



48
49
50
# File 'lib/build/dependency/chain.rb', line 48

def providers
  @providers
end

#selectionObject (readonly)



42
43
44
# File 'lib/build/dependency/chain.rb', line 42

def selection
  @selection
end

Class Method Details

.expand(*args) ⇒ Object

An UnresolvedDependencyError will be thrown if there are any unresolved dependencies.



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/build/dependency/chain.rb', line 15

def self.expand(*args)
  chain = self.new(*args)
  
  chain.freeze
  
  if chain.unresolved.size > 0
    raise UnresolvedDependencyError.new(chain)
  end
  
  return chain
end

Instance Method Details

#freezeObject

Freeze the chain and all its dependencies.



51
52
53
54
55
56
57
58
59
# File 'lib/build/dependency/chain.rb', line 51

def freeze
  return self if frozen?
  
  @selection.freeze
  @dependencies.freeze
  @providers.freeze
  
  super
end

#partial(provider) ⇒ Object

Create a partial chain for a specific provider.



14
15
16
# File 'lib/build/dependency/partial_chain.rb', line 14

def partial(provider)
  PartialChain.expand(self, provider.dependencies)
end