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.



8
9
10
11
# File 'lib/tins/string_version.rb', line 8

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



67
68
69
70
71
72
# File 'lib/tins/string_version.rb', line 67

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



74
75
76
# File 'lib/tins/string_version.rb', line 74

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

#[](index) ⇒ Object



45
46
47
# File 'lib/tins/string_version.rb', line 45

def [](index)
  array[index]
end

#[]=(index, value) ⇒ Object



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

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



78
79
80
# File 'lib/tins/string_version.rb', line 78

def array
   @version.split('.').map(&:to_i)
end

#buildObject



29
30
31
# File 'lib/tins/string_version.rb', line 29

def build
  self[2]
end

#build=(number) ⇒ Object



33
34
35
# File 'lib/tins/string_version.rb', line 33

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

#majorObject



13
14
15
# File 'lib/tins/string_version.rb', line 13

def major
  self[0]
end

#major=(number) ⇒ Object



17
18
19
# File 'lib/tins/string_version.rb', line 17

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

#minorObject



21
22
23
# File 'lib/tins/string_version.rb', line 21

def minor
  self[1]
end

#minor=(number) ⇒ Object



25
26
27
# File 'lib/tins/string_version.rb', line 25

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

#pred!Object



63
64
65
# File 'lib/tins/string_version.rb', line 63

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

#revisionObject



37
38
39
# File 'lib/tins/string_version.rb', line 37

def revision
  self[3]
end

#revision=(number) ⇒ Object



41
42
43
# File 'lib/tins/string_version.rb', line 41

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

#succ!Object



59
60
61
# File 'lib/tins/string_version.rb', line 59

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

#to_sObject Also known as: inspect



84
85
86
# File 'lib/tins/string_version.rb', line 84

def to_s
  @version
end

#versionObject



90
91
92
# File 'lib/tins/string_version.rb', line 90

def version
  self
end