Class: Orca::Resolver

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

Defined Under Namespace

Classes: CircularDependancyError

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(package) ⇒ Resolver

Returns a new instance of Resolver.



3
4
5
6
7
8
# File 'lib/orca/resolver.rb', line 3

def initialize(package)
  @package = package
  @last_seen = package
  @tree = [@package]
  @packages = []
end

Instance Attribute Details

#packagesObject (readonly)

Returns the value of attribute packages.



2
3
4
# File 'lib/orca/resolver.rb', line 2

def packages
  @packages
end

#treeObject (readonly)

Returns the value of attribute tree.



2
3
4
# File 'lib/orca/resolver.rb', line 2

def tree
  @tree
end

Instance Method Details

#add_childrenObject



24
25
26
27
28
29
30
31
32
33
# File 'lib/orca/resolver.rb', line 24

def add_children
  @packages = @packages.reduce([]) do |arr, package|
    arr << package
    package.children.each do |child_name|
      child = Orca::PackageIndex.default.get(child_name)
      arr << child unless arr.include?(child)
    end
    arr
  end
end

#resolveObject



10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/orca/resolver.rb', line 10

def resolve
  dependancies = @package.dependancies.reverse.map { |d| Orca::PackageIndex.default.get(d) }
  begin
    @tree += dependancies.map {|d| Orca::Resolver.new(d).resolve.tree }
  rescue SystemStackError
    raise CircularDependancyError.new
  end
  @packages = @tree.flatten
  @packages.reverse!
  @packages.uniq!
  add_children
  self
end