class Semverse::Version
Attributes
build[R]
major[R]
minor[R]
patch[R]
pre_release[R]
Public Class Methods
coerce(object)
click to toggle source
Coerce the object into a version.
@param [Version, String]
@return [Version]
# File lib/semverse/version.rb, line 9 def coerce(object) object.is_a?(self) ? object : new(object) end
new(*args)
click to toggle source
@overload initialize(version_array)
@param [Array] version_array @example Version.new([1, 2, 3, 'rc.1', 'build.1']) => #<Version: @major=1, @minor=2, @patch=3, @pre_release='rc.1', @build='build.1'>
@overload initialize(version_string)
@param [#to_s] version_string @example Version.new("1.2.3-rc.1+build.1") => #<Version: @major=1, @minor=2, @patch=3, @pre_release='rc.1', @build='build.1'>
@overload initialize(version)
@param [Semverse::Version] version @example Version.new(Version.new("1.2.3-rc.1+build.1")) => #<Version: @major=1, @minor=2, @pre_release='rc.1', @build='build.1'>
# File lib/semverse/version.rb, line 60 def initialize(*args) if args.first.is_a?(Array) @major, @minor, @patch, @pre_release, @build = args.first else @major, @minor, @patch, @pre_release, @build = self.class.split(args.first.to_s) end @major ||= 0 @minor ||= 0 @patch ||= 0 @pre_release ||= nil @build ||= nil end
split(version_string)
click to toggle source
@param [#to_s] version_string
@raise [InvalidVersionFormat]
@return [Array]
# File lib/semverse/version.rb, line 18 def split(version_string) case version_string.to_s when /^(\d+)\.(\d+)\.(\d+)(-([0-9a-z\-\.]+))?(\+([0-9a-z\-\.]+))?$/i [ $1.to_i, $2.to_i, $3.to_i, $5, $7 ] when /^(\d+)\.(\d+)\.(\d+)?$/ [ $1.to_i, $2.to_i, $3.to_i ] when /^(\d+)\.(\d+)?$/ [ $1.to_i, $2.to_i, 0 ] when /^(\d+)$/ [ $1.to_i, 0, 0 ] else raise InvalidVersionFormat.new(version_string) end end
Public Instance Methods
<=>(other)
click to toggle source
@param [Semverse::Version] other
@return [Integer]
# File lib/semverse/version.rb, line 77 def <=>(other) [:major, :minor, :patch].each do |release| ans = self.send(release) <=> other.send(release) return ans if ans != 0 end ans = pre_release_and_build_presence_score <=> other.pre_release_and_build_presence_score return ans if ans != 0 ans = identifiers_comparaison(other, :pre_release) return ans if ans != 0 if build && other.build return identifiers_comparaison(other, :build) else return build.to_s <=> other.build.to_s end 0 end
eql?(other)
click to toggle source
@param [Semverse::Version] other
@return [Boolean]
# File lib/semverse/version.rb, line 134 def eql?(other) other.is_a?(Version) && self == other end
identifiers(release)
click to toggle source
@return [Array]
# File lib/semverse/version.rb, line 95 def identifiers(release) send(release).to_s.split('.').map do |str| str.to_i.to_s == str ? str.to_i : str end end
identifiers_comparaison(other, release)
click to toggle source
@param [Semverse::Version] other
@return [Integer]
# File lib/semverse/version.rb, line 117 def identifiers_comparaison(other, release) [identifiers(release).length, other.identifiers(release).length].max.times do |i| if identifiers(release)[i].class == other.identifiers(release)[i].class ans = identifiers(release)[i] <=> other.identifiers(release)[i] return ans if ans != 0 elsif identifiers(release)[i] && other.identifiers(release)[i] return identifiers(release)[i].class.to_s <=> other.identifiers(release)[i].class.to_s elsif identifiers(release)[i] || other.identifiers(release)[i] return other.identifiers(release)[i].class.to_s <=> identifiers(release)[i].class.to_s end end 0 end
inspect()
click to toggle source
# File lib/semverse/version.rb, line 138 def inspect "#<#{self.class.to_s} #{to_s}>" end
pre_release?()
click to toggle source
# File lib/semverse/version.rb, line 101 def pre_release? !!pre_release end
pre_release_and_build_presence_score()
click to toggle source
@return [Integer]
# File lib/semverse/version.rb, line 110 def pre_release_and_build_presence_score pre_release ? 0 : (build.nil? ? 1 : 2) end
to_s()
click to toggle source
# File lib/semverse/version.rb, line 142 def to_s str = "#{major}.#{minor}.#{patch}" str += "-#{pre_release}" if pre_release str += "+#{build}" if build str end
zero?()
click to toggle source
# File lib/semverse/version.rb, line 105 def zero? [major, minor, patch].all? { |n| n == 0 } end