@note Semantic::Version subclasses Numeric so that it has sane Range
semantics in Ruby 1.9+.
# 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
# File lib/puppet/vendor/semantic/lib/semantic/version.rb, line 104 def build @build && @build.join('.') end
# File lib/puppet/vendor/semantic/lib/semantic/version.rb, line 121 def hash self.to_s.hash end
# 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
# File lib/puppet/vendor/semantic/lib/semantic/version.rb, line 95 def prerelease @prerelease && @prerelease.join('.') end
@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
# 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
# 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 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