4: def versioncmp(version_a, version_b)
5: vre = /[-.]|\d+|[^-.\d]+/
6: ax = version_a.scan(vre)
7: bx = version_b.scan(vre)
8:
9: while (ax.length>0 && bx.length>0) do
10: a = ax.shift
11: b = bx.shift
12:
13: if( a == b ) then next
14: elsif (a == '-' && b == '-') then next
15: elsif (a == '-') then return -1
16: elsif (b == '-') then return 1
17: elsif (a == '.' && b == '.') then next
18: elsif (a == '.' ) then return -1
19: elsif (b == '.' ) then return 1
20: elsif (a =~ /^\d+$/ && b =~ /^\d+$/) then
21: if( a =~ /^0/ or b =~ /^0/ ) then
22: return a.to_s.upcase <=> b.to_s.upcase
23: end
24: return a.to_i <=> b.to_i
25: else
26: return a.upcase <=> b.upcase
27: end
28: end
29: return version_a <=> version_b;
30: end