Class: Richcss::Resolver

Inherits:
Object
  • Object
show all
Defined in:
lib/richcss/resolver.rb

Class Method Summary collapse

Class Method Details

.start(part_name, version, installed = {}) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/richcss/resolver.rb', line 7

def self.start(part_name, version, installed = {})
  installed_deps = []
  installed.each do | p, v |
    installed_deps.push(VersionKit::Dependency.new(p, v))
  end
  @resolver = Molinillo::Resolver.new(RichSpecificationProvider.new(part_name, version), RichUI.new)
  @base_dg = Molinillo::DependencyGraph.new
  installed_deps.each { |dep| @base_dg.add_vertex dep.name, dep }
  requirements = [VersionKit::Dependency.new(part_name, version)]
  dg = @resolver.resolve(requirements, @base_dg)
  puts "Succesfully resolved dependencies\n"
  new_deps = dg.map(&:payload).flatten
  new_deps.each { |dep| installed[dep.name] = dep.version }
  return installed
rescue Molinillo::VersionConflict => e
  puts e
  return nil
rescue Molinillo::CircularDependencyError => e
  names = e.dependencies.sort_by(&:name).map {|d| "gem '#{d.name}'" }
  puts "Your RichCSS part requires parts that depend" \
    " on each other, creating an circular loop. Please remove" \
    " #{names.count > 1 ? "either " : ""}#{names.join(" or ")}" \
    " and try again."
  return nil
end