Class: Gel::PubGrub::PreferenceStrategy

Inherits:
Object
  • Object
show all
Defined in:
lib/gel/pub_grub/preference_strategy.rb

Instance Method Summary collapse

Constructor Details

#initialize(loader, overrides, bump: :major, strict: false) ⇒ PreferenceStrategy

Returns a new instance of PreferenceStrategy.



5
6
7
8
9
10
# File 'lib/gel/pub_grub/preference_strategy.rb', line 5

def initialize(loader, overrides, bump: :major, strict: false)
  @loader = loader
  @overrides = overrides
  @bump = bump
  @strict = strict
end

Instance Method Details

#constraintsObject



37
38
39
40
41
42
43
44
45
# File 'lib/gel/pub_grub/preference_strategy.rb', line 37

def constraints
  ranges = @strict ? self.ranges : @overrides

  result = {}
  ranges.each do |package_name, range|
    result[package_name] = [range] if range
  end
  result
end

#package_priority(package, versions) ⇒ Object

Overrides first, then packages for which we have a preference (and that preference is still in play), then everything else.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/gel/pub_grub/preference_strategy.rb', line 14

def package_priority(package, versions)
  if package.name =~ /^~/
    -1000
  elsif @overrides.key?(package.name)
    -100
  elsif range = ranges[package.name]
    yes, no = versions.partition { |version| range.satisfied_by?(version) }
    if yes.any? && no.any?
      -50
    else
      0
    end
  else
    0
  end
end

#sort_versions_by_preferred(package, versions) ⇒ Object



31
32
33
34
35
# File 'lib/gel/pub_grub/preference_strategy.rb', line 31

def sort_versions_by_preferred(package, versions)
  return versions if @strict # already filtered
  return versions unless range = ranges[package.name]
  versions.partition { |version| range.satisfied_by?(version) }.inject(:+)
end