Class: PackageConflictOverlapResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/nu/dependency_leveling/package_conflict_overlap_resolver.rb

Instance Method Summary collapse

Constructor Details

#initialize(installed_packages, package_lister) ⇒ PackageConflictOverlapResolver

Returns a new instance of PackageConflictOverlapResolver.



5
6
7
8
9
# File 'lib/nu/dependency_leveling/package_conflict_overlap_resolver.rb', line 5

def initialize(installed_packages, package_lister)
  @conflict_finder = PackageConflictFinder.new(installed_packages, package_lister)
  @installed_packages = installed_packages
  @package_lister = package_lister
end

Instance Method Details

#analyze_proposal(proposed_package) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/nu/dependency_leveling/package_conflict_overlap_resolver.rb', line 11

def analyze_proposal(proposed_package)
  r = @conflict_finder.analyze_proposal(proposed_package)
  
  Array.new(r.conflicts).each do |conflict|
    hav = highest_acceptable_version(conflict[:name], conflict[:requirement_one], conflict[:requirement_two])
    resolve_conflict(r,conflict,hav) if hav
  end if r.conflict?

  r.suggested_packages.uniq!
  r.conflicts.uniq!
  
  return r
end

#highest_acceptable_version(name, requirement_one, requirement_two) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/nu/dependency_leveling/package_conflict_overlap_resolver.rb', line 25

def highest_acceptable_version(name, requirement_one, requirement_two)
  candidates = @package_lister.find(name)
  candidates = candidates.select do |spec| 
    requirement_one.satisfied_by?(spec.version) and requirement_two.satisfied_by?(spec.version)
  end
  return Gem::Requirement.new(candidates.sort{|a,b| a.version <=> b.version}.last.version) if candidates.length > 0
end