class SemanticPuppet::Dependency::Graph
Attributes
Public Class Methods
Create a new instance of a dependency graph.
@param modules [{String => VersionRange}] the required module
set and their version constraints
# File lib/semantic_puppet/dependency/graph.rb, line 14 def initialize(modules = {}) @modules = modules.keys modules.each do |name, range| add_constraint('initialize', name, range.to_s) do |node| range === node.version end add_dependency(name) end end
Public Instance Methods
Constrains graph solutions based on the given block. Graph
constraints are used to describe fundamental truths about the tooling or module system (e.g.: module names contain a namespace component which is dropped during install, so module names must be unique excluding the namespace).
@example Ensuring a single source for all modules
@graph.add_constraint('installed', mod.name) do |nodes| nodes.count { |node| node.source } == 1 end
@see considering_solution?
@param source [String, Symbol] a name describing the source of the
constraint
@yieldparam nodes [Array<GraphNode>] the nodes to test the constraint
against
@yieldreturn [Boolean] whether the node passed the constraint @return [void]
# File lib/semantic_puppet/dependency/graph.rb, line 45 def add_graph_constraint(source, &block) constraints[:graph] << [ source, block ] end
Checks the proposed solution (or partial solution) against the graph's constraints.
@see add_graph_constraint
@return [Boolean] true if none of the graph constraints are violated
# File lib/semantic_puppet/dependency/graph.rb, line 55 def satisfies_graph?(solution) constraints[:graph].all? { |_, check| check[solution] } end