Class: Milkshake::DependencyResolver

Inherits:
Object
  • Object
show all
Includes:
TSort
Defined in:
lib/milkshake/dependency_resolver.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(gems) ⇒ DependencyResolver

Returns a new instance of DependencyResolver.



16
17
18
19
20
21
22
23
24
# File 'lib/milkshake/dependency_resolver.rb', line 16

def initialize(gems)
  specs = gems.collect do |k,r|
    find_gemspec(k, r)
  end.compact
  
  @names = specs.collect { |spec| spec.name }
  @specs = specs.inject({}) { |h, spec| h[spec.name] = spec ; h }
  @gems  = gems
end

Instance Attribute Details

#gemsObject (readonly)

Returns the value of attribute gems.



7
8
9
# File 'lib/milkshake/dependency_resolver.rb', line 7

def gems
  @gems
end

#namesObject (readonly)

Returns the value of attribute names.



7
8
9
# File 'lib/milkshake/dependency_resolver.rb', line 7

def names
  @names
end

#specsObject (readonly)

Returns the value of attribute specs.



7
8
9
# File 'lib/milkshake/dependency_resolver.rb', line 7

def specs
  @specs
end

Class Method Details

.load_for(gems) ⇒ Object



9
10
11
12
13
14
# File 'lib/milkshake/dependency_resolver.rb', line 9

def self.load_for(gems)
  dependency_loader = self.new(gems)
  dependency_loader.add_dependecies!
  dependency_loader.order_by_dependecies!
  return dependency_loader
end

Instance Method Details

#add_dependecies!Object



26
27
28
29
30
# File 'lib/milkshake/dependency_resolver.rb', line 26

def add_dependecies!
  @specs.values.each do |spec|
    add_dependecies_for spec
  end
end

#eachObject



36
37
38
39
40
# File 'lib/milkshake/dependency_resolver.rb', line 36

def each
  @names.each do |name|
    yield(@specs[name])
  end
end

#order_by_dependecies!Object



32
33
34
# File 'lib/milkshake/dependency_resolver.rb', line 32

def order_by_dependecies!
  @names = tsort
end

#reverse_eachObject



42
43
44
45
46
# File 'lib/milkshake/dependency_resolver.rb', line 42

def reverse_each
  @names.reverse.each do |name|
    yield(@specs[name])
  end
end