Class Bundler::GemVersionPromoter
In: lib/bundler/gem_version_promoter.rb
Parent: Object

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.

Methods

level=   major?   minor?   new   sort_versions  

Constants

DEBUG = ENV["DEBUG_RESOLVER"]

Attributes

level  [R] 
locked_specs  [R] 
prerelease_specified  [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 by 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.

unlock_gems  [R] 

Public Class methods

Given a list of locked_specs and a list of gems to unlock creates a GemVersionPromoter instance.

@param locked_specs [SpecSet] All current locked specs. Unlike Definition

  where this list is empty if all gems are being updated, this should
  always be populated for all gems so this class can properly function.

@param unlock_gems [String] List of gem names being unlocked. If empty,

  all gems will be considered unlocked.

@return [GemVersionPromoter]

Public Instance methods

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

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

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

Given a Dependency and an Array of SpecGroups of available versions for a gem, this method will return the Array of SpecGroups 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 dep [Dependency] The Dependency of the gem. @param spec_groups [SpecGroup] An array of SpecGroups for the same gem

   named in the @dep param.

@return [SpecGroup] A new instance of the SpecGroup Array sorted and

   possibly filtered.

[Validate]