55 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
module Gitlab
 | 
						|
  class VersionInfo
 | 
						|
    include Comparable
 | 
						|
 | 
						|
    attr_reader :major, :minor, :patch
 | 
						|
 | 
						|
    def self.parse(str)
 | 
						|
      if str && m = str.match(/(\d+)\.(\d+)\.(\d+)/)
 | 
						|
        VersionInfo.new(m[1].to_i, m[2].to_i, m[3].to_i)
 | 
						|
      else
 | 
						|
        VersionInfo.new
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    def initialize(major = 0, minor = 0, patch = 0)
 | 
						|
      @major = major
 | 
						|
      @minor = minor
 | 
						|
      @patch = patch
 | 
						|
    end
 | 
						|
 | 
						|
    def <=>(other)
 | 
						|
      return unless other.is_a? VersionInfo
 | 
						|
      return unless valid? && other.valid?
 | 
						|
 | 
						|
      if other.major < @major
 | 
						|
        1
 | 
						|
      elsif @major < other.major
 | 
						|
        -1
 | 
						|
      elsif other.minor < @minor
 | 
						|
        1
 | 
						|
      elsif @minor < other.minor
 | 
						|
        -1
 | 
						|
      elsif other.patch < @patch
 | 
						|
        1
 | 
						|
      elsif @patch < other.patch
 | 
						|
        -1
 | 
						|
      else
 | 
						|
        0
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    def to_s
 | 
						|
      if valid?
 | 
						|
        "%d.%d.%d" % [@major, @minor, @patch]
 | 
						|
      else
 | 
						|
        "Unknown"
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    def valid?
 | 
						|
      @major >= 0 && @minor >= 0 && @patch >= 0 && @major + @minor + @patch > 0
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |