Skip to content

Instantly share code, notes, and snippets.

@mkristian
Created March 9, 2010 16:45
Show Gist options
  • Save mkristian/326778 to your computer and use it in GitHub Desktop.
Save mkristian/326778 to your computer and use it in GitHub Desktop.
$ ruby version.rb
1 = 1 : true
1-SNAPSHOT = 1-SNAPSHOT : true
1 < 2 : true
1-SNAPSHOT < 2-SNAPSHOT : true
1.5 < 2 : true
1.5-SNAPSHOT < 2-SNAPSHOT : true
1 < 2.5 : true
1-SNAPSHOT < 2.5-SNAPSHOT : true
1 = 1.0 : true
1-SNAPSHOT = 1.0-SNAPSHOT : true
1 = 1.0.0 : true
1-SNAPSHOT = 1.0.0-SNAPSHOT : true
1.0 < 1.1 : true
1.0-SNAPSHOT < 1.1-SNAPSHOT : true
1.1 < 1.2 : true
1.1-SNAPSHOT < 1.2-SNAPSHOT : true
1.0.0 < 1.1 : true
1.0.0-SNAPSHOT < 1.1-SNAPSHOT : true
1.1 < 1.2.0 : true
1.1-SNAPSHOT < 1.2.0-SNAPSHOT : true
1.0-alpha-1 < 1.0 : true
1.0-alpha-1-SNAPSHOT < 1.0-SNAPSHOT : true
1.0-alpha-1 < 1.0-alpha-2 : true
1.0-alpha-1-SNAPSHOT < 1.0-alpha-2-SNAPSHOT : true
1.0-alpha-1 < 1.0-beta-1 : true
1.0-alpha-1-SNAPSHOT < 1.0-beta-1-SNAPSHOT : true
1.0 < 1.0-1 : true
1.0-SNAPSHOT < 1.0-1-SNAPSHOT : true
1.0-1 < 1.0-2 : true
1.0-1-SNAPSHOT < 1.0-2-SNAPSHOT : true
2.0-0 = 2.0 : true
2.0-0-SNAPSHOT = 2.0-SNAPSHOT : true
2.0 < 2.0-1 : true
2.0-SNAPSHOT < 2.0-1-SNAPSHOT : true
2.0.0 < 2.0-1 : true
2.0.0-SNAPSHOT < 2.0-1-SNAPSHOT : true
2.0-1 < 2.0.1 : true
2.0-1-SNAPSHOT < 2.0.1-SNAPSHOT : true
2.0.1-klm < 2.0.1-lmn : true
2.0.1-klm-SNAPSHOT < 2.0.1-lmn-SNAPSHOT : true
2.0.1-xyz < 2.0.1 : true
2.0.1-xyz-SNAPSHOT < 2.0.1-SNAPSHOT : true
2.0.1 < 2.0.1-123 : true
2.0.1-SNAPSHOT < 2.0.1-123-SNAPSHOT : true
2.0.1-xyz < 2.0.1-123 : true
2.0.1-xyz-SNAPSHOT < 2.0.1-123-SNAPSHOT : true
1.0-alpha-1 < 1.0-RC1 : true
1.0ea < 1.0 : true
SAMPLES = [
['1','=','1'],
['1-SNAPSHOT','=','1-SNAPSHOT'],
['1','<','2'],
['1-SNAPSHOT','<','2-SNAPSHOT'],
['1.5','<','2'],
['1.5-SNAPSHOT','<','2-SNAPSHOT'],
['1','<','2.5'],
['1-SNAPSHOT','<','2.5-SNAPSHOT'],
['1','=','1.0'],
['1-SNAPSHOT','=','1.0-SNAPSHOT'],
['1','=','1.0.0'],
['1-SNAPSHOT','=','1.0.0-SNAPSHOT'],
['1.0','<','1.1'],
['1.0-SNAPSHOT','<','1.1-SNAPSHOT'],
['1.1','<','1.2'],
['1.1-SNAPSHOT','<','1.2-SNAPSHOT'],
['1.0.0','<','1.1'],
['1.0.0-SNAPSHOT','<','1.1-SNAPSHOT'],
['1.1','<','1.2.0'],
['1.1-SNAPSHOT','<','1.2.0-SNAPSHOT'],
['1.0-alpha-1','<','1.0'],
['1.0-alpha-1-SNAPSHOT','<','1.0-SNAPSHOT'],
['1.0-alpha-1','<','1.0-alpha-2'],
['1.0-alpha-1-SNAPSHOT','<','1.0-alpha-2-SNAPSHOT'],
['1.0-alpha-1','<','1.0-beta-1'],
['1.0-alpha-1-SNAPSHOT','<','1.0-beta-1-SNAPSHOT'],
['1.0','<','1.0-1'],
['1.0-SNAPSHOT','<','1.0-1-SNAPSHOT'],
['1.0-1','<','1.0-2'],
['1.0-1-SNAPSHOT','<','1.0-2-SNAPSHOT'],
['2.0-0','=','2.0'],
['2.0-0-SNAPSHOT','=','2.0-SNAPSHOT'],
['2.0','<','2.0-1'],
['2.0-SNAPSHOT','<','2.0-1-SNAPSHOT'],
['2.0.0','<','2.0-1'],
['2.0.0-SNAPSHOT','<','2.0-1-SNAPSHOT'],
['2.0-1','<','2.0.1'],
['2.0-1-SNAPSHOT','<','2.0.1-SNAPSHOT'],
['2.0.1-klm','<','2.0.1-lmn'],
['2.0.1-klm-SNAPSHOT','<','2.0.1-lmn-SNAPSHOT'],
['2.0.1-xyz','<','2.0.1'],
['2.0.1-xyz-SNAPSHOT','<','2.0.1-SNAPSHOT'],
['2.0.1','<','2.0.1-123'],
['2.0.1-SNAPSHOT','<','2.0.1-123-SNAPSHOT'],
['2.0.1-xyz','<','2.0.1-123'],
['2.0.1-xyz-SNAPSHOT','<','2.0.1-123-SNAPSHOT'],
['1.0-alpha-1','<','1.0-RC1'],
['1.0ea','<','1.0'],
]
require 'rubygems'
def to_gem_version(version)
version = version.sub(/-SNAPSHOT/, '')
main_part = version.sub(/-.*/, '')
extra_part = version.sub(/[^\-]*-/, '') if version =~ /\-/
if main_part =~ /^[a-z0-9]*$/
version = main_part + ".0.0-" + extra_part.to_s
elsif main_part =~ /^[a-z0-9]*\.[a-z0-9]*$/
version = main_part + ".0-" + extra_part.to_s
end
version.gsub!(/-/, '.')
version.gsub!(/\.$/, '')
version.downcase!
Gem::Version.new(version)
end
SAMPLES.each do |sample|
first = to_gem_version(sample[0])
second = to_gem_version(sample[2])
puts "#{sample[0]} #{sample[1]} #{sample[2]} : #{(first <=> second) == (sample[1] == '<' ? -1 : 0)}"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment