Class: Gel::PubGrub::PreferenceStrategy
- Inherits:
-
Object
- Object
- Gel::PubGrub::PreferenceStrategy
- Defined in:
- lib/gel/pub_grub/preference_strategy.rb
Instance Method Summary collapse
- #constraints ⇒ Object
-
#initialize(loader, overrides, bump: :major, strict: false) ⇒ PreferenceStrategy
constructor
A new instance of PreferenceStrategy.
-
#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.
- #sort_versions_by_preferred(package, versions) ⇒ Object
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
#constraints ⇒ Object
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 |