Grimoire
Light weight generic dependency resolver. Supports weighted solutions via scored units.
Usage
Basic usage flow:
- Create a system
system = Grimoire::System.new
- Add units
system.add_units(
Grimoire::Unit.new(
:name => 'unit1',
:version => '1.0.0'
),
Grimoire::Unit.new(
:name => 'unit1',
:version => '1.1.0'
),
...
)
- Create a score keeper
NOTE: Score keeper is optional and must be subclassed. This example will not actually work.
score_keeper = Grimoire::ScoreKeeper.new
- Create solver
solver = Grimoire::Solver.new(
:system => system,
:score_keeper => score_keeper,
:requirements => [
['unit1', '> 2.0.0'],
['unit2', '> 1', '< 3']
]
)
- Create a solver with restrictions (optional)
solver = Grimoire::Solver.new(
:system => system,
:score_keeper => score_keeper,
:requirements => [
['unit1', '> 2.0.0'],
['unit2', '> 1', '< 3']
],
:restrictions => [
['unit1', '< 3'],
['unit2', '> 1.2.0']
]
)
- Generate solutions
solutions = solver.generate!
p solutions.pop
The ideal solution will be the first path on the queue.
Info
- Repository: https://github.com/spox/grimoire