Class: RSMP::SXL::Processing::Resolver

Inherits:
Object
  • Object
show all
Defined in:
lib/rsmp/sxl/processing/resolver.rb

Overview

Resolves root requirements to a deterministic set of exact SXL versions.

Instance Method Summary collapse

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

Raises:



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