Revision: 16338
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at July 31, 2009 11:49 by bananastalktome
Initial Code
class Version include Comparable attr_reader :major, :feature_group, :feature, :bugfix def initialize(version="") v = version.split(".") @major = v[0].to_i @feature_group = v[1].to_i @feature = v[2].to_i @bugfix = v[3].to_i end def <=>(other) return @major <=> other.major if ((@major <=> other.major) != 0) return @feature_group <=> other.feature_group if ((@feature_group <=> other.feature_group) != 0) return @feature <=> other.feature if ((@feature <=> other.feature) != 0) return @bugfix <=> other.bugfix end def self.sort self.sort!{|a,b| a <=> b} end def to_s @major.to_s + "." + @feature_group.to_s + "." + @feature.to_s + "." + @bugfix.to_s end end ## Example Usage: ## list = [] ## ["1.2.2.10","1.2.2.1","2.1.10.2","2.3.4.1"].each {|v| list.push(Version.new(v)) } ## list.sort.each{|v| pp v.to_s } ## ###"1.2.2.1" ###"1.2.2.10" ###"2.1.10.2" ###"2.3.4.1"
Initial URL
Initial Description
Probably not the most elegant solution, but it works. Needed this for a capistrano deploy task which shows the most recent tagged releases in my repository. Very bare bones, and needs tweaking if your versions are not in X.X.X.X format.
Initial Title
Ruby class for easy version number natural order sorting
Initial Tags
sort, number, ruby, order
Initial Language
Ruby