Skip to content
master
Switch branches/tags
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Solve

Gem Version Build Status

A Ruby versioning constraint solver implementing Semantic Versioning 2.0.0.

Installation

$ gem install solve

Usage

Create a new graph

graph = Solve::Graph.new

Add an artifact to the graph

graph.artifact("nginx", "1.0.0")

Now add another artifact that has a dependency

graph.artifact("mysql", "1.2.4-alpha.1").depends("openssl", "~> 1.0.0")

Dependencies can be chained, too

graph.artifact("ntp", "1.0.0").depends("build-essential").depends("yum")

And now solve the graph with some demands

Solve.it!(graph, [['nginx', '>= 0.100.0']])

Or, if you want a topologically sorted solution NOTE: This will raise Solve::Errors::UnsortableSolutionError if the solution contains a cycle (which can happen with ruby packages)

Solve.it!(graph, [['nginx', '>= 0.100.0']], sorted: true)

Selecting A Resolver

Solve supports two different resolvers. A pure Ruby solver implemented using Molinillo and the same dependency resolver the Chef Server uses, dep-selector, which is a Ruby C extension for Gecode.

You can set the resolver by calling Solve.engine= with the symbol :ruby or :gecode.

Solve.engine = :ruby
Solve.engine = :gecode

The Ruby solver is installed and enabled by default. If you'd like to use the Gecode solver you can do so by installing the dep-selector gem or adding it to your Gemfile:

$ gem install dep_selector

Increasing the solver's timeout

By default the solver will wait 30 seconds before giving up on finding a solution. Under certain conditions a graph may be too complicated to solve within the alotted time. To increase the timeout you can set the "SOLVE_TIMEOUT" environment variable to the amount of seconds desired.

$ export SOLVE_TIMEOUT=60

This will set the timeout to 60 seconds instead of the default 30 seconds.

Authors

About

A constraint solver for Ruby

Resources

License

Packages

No packages published

Languages