Skip to content

Instantly share code, notes, and snippets.

@miyohide
Created March 29, 2014 14:53
Show Gist options
  • Save miyohide/9855908 to your computer and use it in GitHub Desktop.
Save miyohide/9855908 to your computer and use it in GitHub Desktop.
def patch_level_compare(v1, v2)
v1_ruby_v, v1_patch_level = ruby_version_split(v1)
v2_ruby_v, v2_patch_level = ruby_version_split(v2)
if v1_ruby_v == v2_ruby_v
if v1_patch_level == v2_patch_level
return 0
elsif v1_patch_level > v2_patch_level
return 1
else
return -1
end
elsif v1_ruby_v > v2_ruby_v
return 1
else
return -1
end
end
def ruby_version_split(v_str)
vers = v_str.tr("-p",".").split(".").delete_if { |i| i.size == 0 }.map { |i| i.to_i }
patch_level = vers.pop
ruby_ver = vers.each_with_index.map { |x, i| x.to_i * 10 ** (5 - i) }.inject { |sum, i| sum + i }
[ruby_ver, patch_level]
end
p patch_level_compare("1.9.3-p123", "1.9.3-p123") # => 0
p patch_level_compare("1.9.3-p124", "1.9.3-p123") # => 1
p patch_level_compare("1.9.3-p123", "1.9.3-p124") # => -1
p patch_level_compare("2.0.0-p0", "1.9.3-p124") # => 1
p patch_level_compare("1.9.3-p123", "2.0.0-p0") # => -1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment