instance method
Gem::Version#<=>
(untyped other) -> ::Integer?
<=>(other)
lib/rubygems/version.rb
View on GitHub ↗
# File tmp/rubies/ruby-4.0.0/lib/rubygems/version.rb, line 345
def <=>(other)
if String === other
return unless self.class.correct?(other)
return self <=> self.class.new(other)
end
return unless Gem::Version === other
return 0 if @version == other.version || canonical_segments == other.canonical_segments
lhsegments = canonical_segments
rhsegments = other.canonical_segments
lhsize = lhsegments.size
rhsize = rhsegments.size
limit = (lhsize > rhsize ? rhsize : lhsize)
i = 0
while i < limit
lhs = lhsegments[i]
rhs = rhsegments[i]
i += 1
next if lhs == rhs
return -1 if String === lhs && Numeric === rhs
return 1 if Numeric === lhs && String === rhs
return lhs <=> rhs
end
lhs = lhsegments[i]
if lhs.nil?
rhs = rhsegments[i]
while i < rhsize
return 1 if String === rhs
return -1 unless rhs.zero?
rhs = rhsegments[i += 1]
end
else
while i < lhsize
return -1 if String === lhs
return 1 unless lhs.zero?
lhs = lhsegments[i += 1]
end
end
0
end
Compares this version with other returning -1, 0, or 1 if the other version is larger, the same, or smaller than this one. other must be an instance of Gem::Version, comparing with other types may raise an exception.