Class: SpecVersion

Inherits:
Object show all
Includes:
Comparable
Defined in:
lib/extensions/mspec/mspec/utils/version.rb

Instance Method Summary collapse

Methods included from Comparable

#<, #<=, #==, #>, #>=, #between?

Constructor Details

#initialize(version, ceil = false) ⇒ SpecVersion

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.)



10
11
12
13
14
# File 'lib/extensions/mspec/mspec/utils/version.rb', line 10

def initialize(version, ceil = false)
  @version = version
  @ceil    = ceil
  @integer = nil
end

Instance Method Details

#<=>(other) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/extensions/mspec/mspec/utils/version.rb', line 44

def <=>(other)
  if other.respond_to? :to_int
    other = Integer other
  else
    other = SpecVersion.new(String(other)).to_i
  end

  self.to_i <=> other
end

#to_iObject

Converts a string representation of a version major.minor.tiny.patchlevel to an integer representation so that comparisons can be made. For example, “1.8.6.77” < “1.8.6.123” would be false if compared as strings.



27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/extensions/mspec/mspec/utils/version.rb', line 27

def to_i
  unless @integer
    major, minor, tiny, patch = @version.split "."
    if @ceil
      tiny = 99 unless tiny
      patch = 9999 unless patch
    end
    parts = [major, minor, tiny, patch].map { |x| x.to_i }
    @integer = ("1%02d%02d%02d%04d" % parts).to_i
  end
  @integer
end

#to_intObject



40
41
42
# File 'lib/extensions/mspec/mspec/utils/version.rb', line 40

def to_int
  to_i
end

#to_sObject



16
17
18
# File 'lib/extensions/mspec/mspec/utils/version.rb', line 16

def to_s
  @version
end

#to_strObject



20
21
22
# File 'lib/extensions/mspec/mspec/utils/version.rb', line 20

def to_str
  to_s
end