Class: Version

Inherits:
Object show all
Includes:
Comparable
Defined in:
lib/mega/version.rb

Overview

:title: Version

A class for manipulating and storing conventional version numbers in the form of “1.0.0”, i.e. major, minor, teeny.

Usage

VERSION = Version["1.2.3"]  # same as Version.new()

VERSION.major               #=> 1
VERSION.minor               #=> 2
VERSION.teeny               #=> 3

VERSION.teeny += 1          #=> 4

VERSION > Version(1,2,3)    #=> true
VERSION > Version("1.2.4")  #=> false

Author(s)

  • Minero Aoki (originator)

  • Thomas Sawyer

Constant Summary collapse

VERSION_EXP =
/\d+(?:[.-]\d+)*/

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(arg, *nums) ⇒ Version

Returns a new instance of Version.



51
52
53
# File 'lib/mega/version.rb', line 51

def initialize( arg, *nums )
  set( arg, *nums )
end

Class Method Details

.[](*args) ⇒ Object



47
48
49
# File 'lib/mega/version.rb', line 47

def self.[](*args)
  Version.new(*args)
end

Instance Method Details

#<=>(other) ⇒ Object



132
133
134
135
136
137
# File 'lib/mega/version.rb', line 132

def <=>( other )
  return false unless self.class === other
  n = @num
  ret = nil; other.instance_eval { ret = (n <=> @num) }
  ret
end

#==(other) ⇒ Object Also known as: eql?



71
72
73
# File 'lib/mega/version.rb', line 71

def ==( other )
  @num == other.to_a
end

#dupObject



67
68
69
# File 'lib/mega/version.rb', line 67

def dup
  self.class.new( *@nums )
end

#hashObject



76
# File 'lib/mega/version.rb', line 76

def hash ; @num.hash ; end

#inspectObject



81
82
83
# File 'lib/mega/version.rb', line 81

def inspect
  "\#<#{self.class} #{to_s}>"
end

#majorObject



85
# File 'lib/mega/version.rb', line 85

def major       ; @num[0]     ; end

#major=(i) ⇒ Object



86
# File 'lib/mega/version.rb', line 86

def major=( i ) ; @num[0] = i ; end

#minorObject



88
# File 'lib/mega/version.rb', line 88

def minor       ; @num[1]     ; end

#minor=(i) ⇒ Object



89
# File 'lib/mega/version.rb', line 89

def minor=( i ) ; @num[1] = i ; end

#next_major!Object



97
98
99
100
# File 'lib/mega/version.rb', line 97

def next_major!    
  (1..last_index).each{ |i| @num[i] = 0 } if last_index > 0
  @num[0] += 1
end

#next_minor!Object



102
103
104
105
106
107
# File 'lib/mega/version.rb', line 102

def next_minor!
  (2..last_index).each{ |i| @num[i] = 0 } if last_index > 1
  if @num[1]
    @num[1] += 1
  end
end

#next_teeny!Object



109
110
111
112
113
114
# File 'lib/mega/version.rb', line 109

def next_teeny!
  (3..last_index).each{ |i| @num[i] = 0 } if last_index > 2
  if @num[2]
    @num[2] += 1
  end
end

#next_weeny!Object



116
117
118
119
120
121
# File 'lib/mega/version.rb', line 116

def next_weeny!
  #(4..last_index).each{ |i| @num[i] = 0 } if last_index > 3
  if @num[3]
    @num[3] += 1
  end
end

#set(arg, *nums) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
# File 'lib/mega/version.rb', line 55

def set( arg, *nums )
  if String === arg then
    unless m = VERSION_EXP.match( arg ) then
      raise ArgumentError, "wrong version string format '#{arg}'"
    end
    @num = m[0].split('.').collect {|i| i.to_i }
  else
    @num = [ arg, *(nums || []) ]
    #@num.unshift arg
  end
end

#teenyObject



91
# File 'lib/mega/version.rb', line 91

def teeny       ; @num[2]     ; end

#teeny=(i) ⇒ Object



92
# File 'lib/mega/version.rb', line 92

def teeny=( i ) ; @num[2] = i ; end

#to_aObject



79
# File 'lib/mega/version.rb', line 79

def to_a ; @num.dup ; end

#to_sObject



78
# File 'lib/mega/version.rb', line 78

def to_s ; @num.join '.' ; end

#typeObject



123
124
125
126
127
128
129
130
# File 'lib/mega/version.rb', line 123

def type
  case last_index
  when 0 then :major
  when 1 then :minor
  when 2 then :teeny
  when 3 then :weeny
  end
end

#weenyObject



94
# File 'lib/mega/version.rb', line 94

def weeny       ; @num[3]     ; end

#weeny=(i) ⇒ Object



95
# File 'lib/mega/version.rb', line 95

def weeny=( i ) ; @num[3] = i ; end