blob: 9c1c58b8df43d8afe0030c16e2c5e8e1296cb2e2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
class SpecVersion
# If beginning implementations have a problem with this include, we can
# manually implement the relational operators that are needed.
include Comparable
# SpecVersion handles comparison correctly for the context by filling in
# missing version parts according to the value of +ceil+. If +ceil+ is
# +false+, 0 digits fill in missing version parts. If +ceil+ is +true+, 9
# digits fill in missing parts. (See e.g. VersionGuard and BugGuard.)
def initialize(version, ceil = false)
@version = version
@ceil = ceil
@integer = nil
end
def to_s
@version
end
def to_str
to_s
end
# Converts a string representation of a version major.minor.tiny
# to an integer representation so that comparisons can be made. For example,
# "2.2.10" < "2.2.2" would be false if compared as strings.
def to_i
unless @integer
major, minor, tiny = @version.split "."
if @ceil
tiny = 99 unless tiny
end
parts = [major, minor, tiny].map { |x| x.to_i }
@integer = ("1%02d%02d%02d" % parts).to_i
end
@integer
end
def to_int
to_i
end
def <=>(other)
if other.respond_to? :to_int
other = Integer(other.to_int)
else
other = SpecVersion.new(String(other)).to_i
end
self.to_i <=> other
end
end
|