Class: RSMP::SXL::Processing::Resolver
- Inherits:
-
Object
- Object
- RSMP::SXL::Processing::Resolver
- Defined in:
- lib/rsmp/sxl/processing/resolver.rb
Overview
Resolves root requirements to a deterministic set of exact SXL versions.
Instance Method Summary collapse
-
#initialize(catalogue) ⇒ Resolver
constructor
A new instance of Resolver.
- #resolve(root_requirements) ⇒ Object
Constructor Details
#initialize(catalogue) ⇒ Resolver
6 7 8 9 |
# File 'lib/rsmp/sxl/processing/resolver.rb', line 6 def initialize(catalogue) @catalogue = catalogue @diagnostics = [] end |
Instance Method Details
#resolve(root_requirements) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/rsmp/sxl/processing/resolver.rb', line 11 def resolve(root_requirements) constraints = Hash.new { |hash, key| hash[key] = [] } root_requirements.each do |name, requirement| Document.validate_name!(name) constraints[name] << requirement end raise Error, 'At least one root SXL is required' if constraints.empty? solution = search({}, constraints) return sorted(solution.values) if solution detail = @diagnostics.uniq.first(3).join('; ') raise Error, "Cannot resolve SXL dependencies#{": #{detail}" unless detail.empty?}" end |