Class: Composer::Package::Version::VersionSelector

Inherits:
Object
  • Object
show all
Defined in:
lib/composer/package/version/version_selector.rb

Overview

Selects the best possible version for a package

PHP Authors: Ryan Weaver <[email protected]>

Ruby Authors: Ioannis Kappas <[email protected]>

Instance Method Summary collapse

Constructor Details

#initialize(pool) ⇒ VersionSelector



24
25
26
# File 'lib/composer/package/version/version_selector.rb', line 24

def initialize(pool)
  @pool = pool
end

Instance Method Details

Given a concrete version, this returns a ~ constraint (when possible) that should be used, for example, in composer.json.

For example:

* 1.2.1         -> ~1.2
* 1.2           -> ~1.2
* v3.2.1        -> ~3.2
* 2.0-beta.1    -> ~2.0@beta
* dev-master    -> ~2.1@dev      (dev version with alias)
* dev-master    -> dev-master    (dev versions are untouched)


42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/composer/package/version/version_selector.rb', line 42

def find_recommended_require_version(package)
  version = package.version
  if !package.is_dev
    return transform_version(version, package.pretty_version, package.stability)
  end

  loader = Composer::Package::Loader::HashLoader.new(parser)
  dumper = Composer::Package::Dumper::HashDumper.new

  if (extra = loader.get_branch_alias(dumper.dump(package)))
    if match = /^(\d+\.\d+\.\d+)(\.9999999)-dev$/.match(extra)
      extra = "#{match[1]}.0"
      extra.gsub!('.9999999', '.0')
      return transform_version(extra, extra, 'dev')
    end
  end

  package.pretty_version
end