class Bundler::GemVersionPromoter

This class contains all of the logic for determining the next version of a Gem to update to based on the requested level (patch, minor, major). Primarily designed to work with Resolver which will provide it the list of available dependency versions as found in its index, before returning it to to the resolution engine to select the best version.

Attributes

level[R]
pre[RW]
strict[RW]

By default, strict is false, meaning every available version of a gem is returned from sort_versions. The order gives preference to the requested level (:patch, :minor, :major) but in complicated requirement cases some gems will by necessity be promoted past the requested level, or even reverted to older versions.

If strict is set to true, the results from sort_versions will be truncated, eliminating any version outside the current level scope. This can lead to unexpected outcomes or even VersionConflict exceptions that report a version of a gem not existing for versions that indeed do existing in the referenced source.

Public Class Methods

new() click to toggle source

Creates a GemVersionPromoter instance.

@return [GemVersionPromoter]

# File bundler/gem_version_promoter.rb, line 29
def initialize
  @level = :major
  @strict = false
  @pre = false
end

Public Instance Methods

level=(value) click to toggle source

@param value [Symbol] One of three Symbols: :major, :minor or :patch.

# File bundler/gem_version_promoter.rb, line 36
def level=(value)
  v = case value
      when String, Symbol
        value.to_sym
  end

  raise ArgumentError, "Unexpected level #{v}. Must be :major, :minor or :patch" unless [:major, :minor, :patch].include?(v)
  @level = v
end
major?() click to toggle source

@return [bool] Convenience method for testing value of level variable.

# File bundler/gem_version_promoter.rb, line 62
def major?
  level == :major
end
minor?() click to toggle source

@return [bool] Convenience method for testing value of level variable.

# File bundler/gem_version_promoter.rb, line 67
def minor?
  level == :minor
end
pre?() click to toggle source

@return [bool] Convenience method for testing value of pre variable.

# File bundler/gem_version_promoter.rb, line 72
def pre?
  pre == true
end
sort_versions(package, specs) click to toggle source

Given a Resolver::Package and an Array of Specifications of available versions for a gem, this method will return the Array of Specifications sorted (and possibly truncated if strict is true) in an order to give preference to the current level (:major, :minor or :patch) when resolution is deciding what versions best resolve all dependencies in the bundle. @param package [Resolver::Package] The package being resolved. @param specs [Specification] An array of Specifications for the package. @return [Specification] A new instance of the Specification Array sorted and

possibly filtered.
# File bundler/gem_version_promoter.rb, line 55
def sort_versions(package, specs)
  specs = filter_dep_specs(specs, package) if strict

  sort_dep_specs(specs, package)
end