mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-09 20:56:08 +10:00
It returns "yes" if required version is "1.7.10" and current version is "1.6.10", because the patch version of current version equals to that of required version.
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 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
|