class Semantic::Version

@note Semantic::Version subclasses Numeric so that it has sane Range

semantics in Ruby 1.9+.

Constants

LOOSE_REGEX

Attributes

major[R]
minor[R]
patch[R]

Public Instance Methods

<=>(other) click to toggle source
# File lib/puppet/vendor/semantic/lib/semantic/version.rb, line 108
def <=>(other)
  return self.major <=> other.major unless self.major == other.major
  return self.minor <=> other.minor unless self.minor == other.minor
  return self.patch <=> other.patch unless self.patch == other.patch
  return compare_prerelease(other)
end
build() click to toggle source
# File lib/puppet/vendor/semantic/lib/semantic/version.rb, line 104
def build
  @build && @build.join('.')
end
hash() click to toggle source
# File lib/puppet/vendor/semantic/lib/semantic/version.rb, line 121
def hash
  self.to_s.hash
end
next(part) click to toggle source
# File lib/puppet/vendor/semantic/lib/semantic/version.rb, line 84
def next(part)
  case part
  when :major
    self.class.new(@major.next, 0, 0)
  when :minor
    self.class.new(@major, @minor.next, 0)
  when :patch
    self.class.new(@major, @minor, @patch.next)
  end
end
prerelease() click to toggle source
# File lib/puppet/vendor/semantic/lib/semantic/version.rb, line 95
def prerelease
  @prerelease && @prerelease.join('.')
end
stable?() click to toggle source

@return [Boolean] true if this is a stable release

# File lib/puppet/vendor/semantic/lib/semantic/version.rb, line 100
def stable?
  @prerelease.nil?
end
to_s() click to toggle source
# File lib/puppet/vendor/semantic/lib/semantic/version.rb, line 115
def to_s
  "#{major}.#{minor}.#{patch}" +
  (@prerelease.nil? || prerelease.empty? ? '' : "-" + prerelease) +
  (@build.nil?      || build.empty?      ? '' : "+" + build     )
end

Public Class Methods

new(major, minor, patch, prerelease = nil, build = nil) click to toggle source
# File lib/puppet/vendor/semantic/lib/semantic/version.rb, line 76
def initialize(major, minor, patch, prerelease = nil, build = nil)
  @major      = major
  @minor      = minor
  @patch      = patch
  @prerelease = prerelease
  @build      = build
end
parse(ver) click to toggle source

Parse a Semantic Version string.

@param ver [String] the version string to parse @return [Version] a comparable {Version} object

# File lib/puppet/vendor/semantic/lib/semantic/version.rb, line 25
def parse(ver)
  match, major, minor, patch, prerelease, build = *ver.match(LOOSE_REGEX)

  if match.nil?
    raise 'Version numbers MUST begin with three dot-separated numbers'
  elsif [major, minor, patch].any? { |x| x =~ /^0\d+/ }
    raise 'Version numbers MUST NOT contain leading zeroes'
  end

  prerelease = parse_prerelease(prerelease) if prerelease
  build = parse_build_metadata(build) if build

  self.new(major.to_i, minor.to_i, patch.to_i, prerelease, build)
end