class XSemVer::PreRelease
def <=>(other)
1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0.
The SemVer 2.0.0-rc2 spec uses this example for determining pre-release precedence:
def <=>(other) # A SemVer with no prerelease data is 'greater' than a SemVer with any prerelease data. # If both prereleases are empty, they are equal. return 1 if empty? && !other.empty? return -1 if !empty? && other.empty? return 0 if empty? && other.empty? [ids.size, other.ids.size].max.times do |n| id = ids[n] oid = other.ids[n] # A pre-release with fewer ids is less than a pre-release with more ids. (1.0.0-alpha < 1.0.0-alpha.1) return 1 if oid.nil? return -1 if id.nil? # If a pre-release id consists of only numbers, it is compared numerically. if id =~ ONLY_DIGITS && oid =~ ONLY_DIGITS id = id.to_i oid = oid.to_i end # If a pre-release id contains one or more letters, it is compared alphabetically. comparison = (id <=> oid) return comparison unless comparison == 0 end 0 end