class Composer::Package::Version::VersionSelector

Selects the best possible version for a package

PHP Authors: Ryan Weaver <ryan@knpuniversity.com>

Ruby Authors: Ioannis Kappas <ikappas@devworks.gr>

Public Class Methods

new(pool) click to toggle source
# File lib/composer/package/version/version_selector.rb, line 24
def initialize(pool)
  @pool = pool
end

Public Instance Methods

Private Instance Methods

parser() click to toggle source
# File lib/composer/package/version/version_selector.rb, line 99
def parser
  @parser ||= Composer::Package::Version::VersionParser.new
  @parser
end
transform_version(version, pretty_version, stability) click to toggle source
# File lib/composer/package/version/version_selector.rb, line 64
def transform_version(version, pretty_version, stability)
  # attempt to transform 2.1.1 to 2.1
  # this allows you to upgrade through minor versions
  semantic_version_parts = version.split('.')
  op = '~'

    # check to see if we have a semver-looking version
    if semantic_version_parts.length == 4 && /^0\D?/.match(semantic_version_parts[3])
      # remove the last parts (i.e. the patch version number and any extra)
      if semantic_version_parts[0] === '0'
        if semantic_version_parts[1] === '0'
          semantic_version_parts[3] = '*'
        else
          semantic_version_parts[2] = '*'
          semantic_version_parts.delete_at(3)
        end
        op = ''
      else
        semantic_version_parts.delete_at(3)
        semantic_version_parts.delete_at(2)
      end
      version = semantic_version_parts.join('.')
    else
      return pretty_version
    end

    # append stability flag if not default
    if stability != 'stable'
      version <<  "@#{stability}"
    end

    # 2.1 -> ~2.1
    op + version
end