The Version class processes string versions into comparable values. A version string should normally be a series of numbers separated by periods. Each part (digits separated by periods) is considered its own number, and these are used for sorting. So for instance, 3.10 sorts higher than 3.2 because ten is greater than two.
If any part contains letters (currently only a-z are supported) then that version is considered prerelease. Versions with a prerelease part in the Nth part sort less than versions with N-1 parts. Prerelease parts are sorted alphabetically using the normal Ruby string sorting rules.
Prereleases sort between real releases (newest to oldest):
(Not documented)
# File lib/rubygems/version.rb, line 76 def self.correct?(version) pattern = /\A\s*(#{VERSION_PATTERN})*\s*\z/ version.is_a? Integer or version =~ pattern or version.to_s =~ pattern end
Factory method to create a Version object. Input may be a Version or a String. Intended to simplify client code.
ver1 = Version.create('1.3.17') # -> (Version object)
ver2 = Version.create(ver1) # -> (ver1)
ver3 = Version.create(nil) # -> nil
# File lib/rubygems/version.rb, line 92 def self.create(input) if input.respond_to? :version then input elsif input.nil? then nil else new input end end
Constructs a Version from the version string. A version string is a series of digits or ASCII letters separated by dots.
# File lib/rubygems/version.rb, line 106 def initialize(version) raise ArgumentError, "Malformed version number string #{version}" unless self.class.correct?(version) self.version = version end
Compares this version with other returning -1, 0, or 1 if the other version is larger, the same, or smaller than this one.
# File lib/rubygems/version.rb, line 188 def <=>(other) return nil unless self.class === other return 1 unless other mine, theirs = balance(self.parts.dup, other.parts.dup) mine <=> theirs end
(Not documented)
# File lib/rubygems/version.rb, line 195 def balance(a, b) a << Part.new(0) while a.size < b.size b << Part.new(0) while b.size < a.size [a, b] end
Return a new version object where the next to the last revision number is one greater. (e.g. 5.3.1 => 5.4)
Pre-release (alpha) parts are ignored. (e.g 5.3.1.b2 => 5.4)
# File lib/rubygems/version.rb, line 219 def bump parts = parse_parts_from_version_string parts.pop while parts.any? { |part| part.alpha? } parts.pop if parts.size > 1 parts[-1] = parts[-1].succ self.class.new(parts.join(".")) end
A Version is only eql? to another version if it has the same version string. “1.0“ is not the same version as “1”.
# File lib/rubygems/version.rb, line 205 def eql?(other) self.class === other and @version == other.version end
Dump only the raw version string, not the complete object
# File lib/rubygems/version.rb, line 120 def marshal_dump [@version] end
Load custom marshal format
# File lib/rubygems/version.rb, line 127 def marshal_load(array) self.version = array[0] end
Strip ignored trailing zeros.
# File lib/rubygems/version.rb, line 138 def normalize parts_arr = parse_parts_from_version_string if parts_arr.length != 1 parts_arr.pop while parts_arr.last && parts_arr.last.value == 0 parts_arr = [Part.new(0)] if parts_arr.empty? end parts_arr end
(Not documented)
# File lib/rubygems/version.rb, line 131 def parts @parts ||= normalize end
A version is considered a prerelease if any part contains a letter.
# File lib/rubygems/version.rb, line 166 def prerelease? parts.any? { |part| part.alpha? } end
The release for this version (e.g. 1.2.0.a -> 1.2.0) Non-prerelease versions return themselves
# File lib/rubygems/version.rb, line 173 def release return self unless prerelease? rel_parts = parts.dup rel_parts.pop while rel_parts.any? { |part| part.alpha? } self.class.new(rel_parts.join('.')) end
Returns the text representation of the version
# File lib/rubygems/version.rb, line 150 def to_s @version end
(Not documented)
# File lib/rubygems/version.rb, line 154 def to_yaml_properties ['@version'] end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.