Class: DepSelector::DependencyGraph
- Inherits:
-
Object
- Object
- DepSelector::DependencyGraph
- Defined in:
- lib/dep_selector/dependency_graph.rb
Constant Summary collapse
- DebugOptionFile =
"/tmp/DepSelectorDebugOn"
Instance Attribute Summary collapse
-
#packages ⇒ Object
readonly
Returns the value of attribute packages.
Instance Method Summary collapse
-
#clone ⇒ Object
Does a mostly deep copy of this graph, creating new Package, PackageVersion, and Dependency objects in the copy graph.
- #each_package ⇒ Object
- #gecode_model_vars ⇒ Object
- #gecode_wrapper ⇒ Object
-
#generate_gecode_wrapper_constraints(packages_to_include_in_solve = nil) ⇒ Object
Note: only invoke this method once all Packages and PackageVersions have been added.
-
#initialize ⇒ DependencyGraph
constructor
A new instance of DependencyGraph.
- #package(name) ⇒ Object
- #to_s(incl_densely_packed_versions = false) ⇒ Object
Constructor Details
#initialize ⇒ DependencyGraph
Returns a new instance of DependencyGraph.
33 34 35 |
# File 'lib/dep_selector/dependency_graph.rb', line 33 def initialize @packages = {} end |
Instance Attribute Details
#packages ⇒ Object (readonly)
Returns the value of attribute packages.
31 32 33 |
# File 'lib/dep_selector/dependency_graph.rb', line 31 def packages @packages end |
Instance Method Details
#clone ⇒ Object
Does a mostly deep copy of this graph, creating new Package, PackageVersion, and Dependency objects in the copy graph. Version and VersionConstraint objects are re-used from the existing graph.
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/dep_selector/dependency_graph.rb', line 83 def clone copy = self.class.new @packages.each do |name, package| copy_package = copy.package(name) package.versions.each do |package_version| copy_pkg_version = copy_package.add_version(package_version.version) package_version.dependencies.each do |pkg_vers_dep| dep_pkg_name = pkg_vers_dep.package.name copy_dependency = DepSelector::Dependency.new(copy.package(dep_pkg_name), pkg_vers_dep.constraint) copy_pkg_version.dependencies << copy_dependency end end end copy end |
#each_package ⇒ Object
41 42 43 44 45 |
# File 'lib/dep_selector/dependency_graph.rb', line 41 def each_package packages.each do |name, pkg| yield pkg end end |
#gecode_model_vars ⇒ Object
72 73 74 |
# File 'lib/dep_selector/dependency_graph.rb', line 72 def gecode_model_vars packages.inject({}){|acc, elt| acc[elt.first] = elt.last.gecode_model_var ; acc } end |
#gecode_wrapper ⇒ Object
47 48 49 50 |
# File 'lib/dep_selector/dependency_graph.rb', line 47 def gecode_wrapper raise "Must invoke generate_gecode_wrapper_constraints before attempting to access gecode_wrapper" unless @gecode_wrapper @gecode_wrapper end |
#generate_gecode_wrapper_constraints(packages_to_include_in_solve = nil) ⇒ Object
Note: only invoke this method once all Packages and PackageVersions have been added.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/dep_selector/dependency_graph.rb', line 54 def generate_gecode_wrapper_constraints(packages_to_include_in_solve=nil) unless @gecode_wrapper packages_in_solve = if packages_to_include_in_solve packages_to_include_in_solve else packages.map{ |name, pkg| pkg } end debugFlag = DebugOptionFile && File::exists?(DebugOptionFile) # In addition to all the packages that the user specified, # there is a "ghost" package that contains the solution # constraints. See Selector#solve for more information. @gecode_wrapper = GecodeWrapper.new(packages_in_solve.size + 1, debugFlag) packages_in_solve.each{ |pkg| pkg.generate_gecode_wrapper_constraints } end end |
#package(name) ⇒ Object
37 38 39 |
# File 'lib/dep_selector/dependency_graph.rb', line 37 def package(name) packages.has_key?(name) ? packages[name] : (packages[name]=Package.new(self, name)) end |
#to_s(incl_densely_packed_versions = false) ⇒ Object
76 77 78 |
# File 'lib/dep_selector/dependency_graph.rb', line 76 def to_s(incl_densely_packed_versions = false) packages.keys.sort.map{|name| packages[name].to_s(incl_densely_packed_versions)}.join("\n") end |