Class: Tins::StringVersion::Version

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/tins/string_version.rb

Instance Method Summary collapse

Constructor Details

#initialize(string) ⇒ Version

Returns a new instance of Version.



6
7
8
9
# File 'lib/tins/string_version.rb', line 6

def initialize(string)
  string =~ /\A[\.\d]+\z/ or raise ArgumentError, "#{string.inspect} isn't a version number"
  @version = string.frozen? ? string.dup : string
end

Instance Method Details

#<=>(other) ⇒ Object



65
66
67
68
69
70
# File 'lib/tins/string_version.rb', line 65

def <=>(other)
  pairs = array.zip(other.array)
  pairs.map! { |a, b| [ a.nil? ? 0 : a, b.nil? ? 0 : b ] }
  a, b = pairs.transpose
  a <=> b
end

#==(other) ⇒ Object



72
73
74
# File 'lib/tins/string_version.rb', line 72

def ==(other)
  (self <=> other).zero?
end

#[](index) ⇒ Object



43
44
45
# File 'lib/tins/string_version.rb', line 43

def [](index)
  array[index]
end

#[]=(index, value) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/tins/string_version.rb', line 47

def []=(index, value)
  value = value.to_i
  value >= 0 or raise ArgumentError, "version numbers can't contain negative numbers like #{value}"
  a = array
  @array = nil
  a[index] = value
  a.map! { |x| x.nil? ? 0 : x }
  @version.replace a * '.'
end

#arrayObject Also known as: to_a



76
77
78
# File 'lib/tins/string_version.rb', line 76

def array
  @version.split('.').map { |x| x.to_i }
end

#buildObject



27
28
29
# File 'lib/tins/string_version.rb', line 27

def build
  self[2]
end

#build=(number) ⇒ Object



31
32
33
# File 'lib/tins/string_version.rb', line 31

def build=(number)
  self[2] = number
end

#majorObject



11
12
13
# File 'lib/tins/string_version.rb', line 11

def major
  self[0]
end

#major=(number) ⇒ Object



15
16
17
# File 'lib/tins/string_version.rb', line 15

def major=(number)
  self[0] = number
end

#minorObject



19
20
21
# File 'lib/tins/string_version.rb', line 19

def minor
  self[1]
end

#minor=(number) ⇒ Object



23
24
25
# File 'lib/tins/string_version.rb', line 23

def minor=(number)
  self[1] = number
end

#pred!Object



61
62
63
# File 'lib/tins/string_version.rb', line 61

def pred!
  self[-1] -= 1
end

#revisionObject



35
36
37
# File 'lib/tins/string_version.rb', line 35

def revision
  self[3]
end

#revision=(number) ⇒ Object



39
40
41
# File 'lib/tins/string_version.rb', line 39

def revision=(number)
  self[3] = number
end

#succ!Object



57
58
59
# File 'lib/tins/string_version.rb', line 57

def succ!
  self[-1] += 1
end

#to_sObject Also known as: inspect



82
83
84
# File 'lib/tins/string_version.rb', line 82

def to_s
  @version
end

#versionObject



88
89
90
# File 'lib/tins/string_version.rb', line 88

def version
  self
end