Method: Doing::Version#version_to_a

Defined in:
lib/doing/changelog/version.rb

#version_to_a(string) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/doing/changelog/version.rb', line 12

def version_to_a(string)
  raise 'Version not a string' unless string.is_a?(String)

  v = string.match(/(?<maj>\d+)(?:\.(?<min>[\d*?]+))?(?:\.(?<patch>[\d*?]+))?/)

  raise 'Error parsing semantic version string' if v.nil?

  maj = v['maj'].to_i
  min = case v['min']
        when /[*?]/
          v['min'].sub(/(\d+)?[^\d]/, '\1\d+')
        when /^[0-9]+$/
          v['min'].to_i
        end
  pat = case v['patch']
        when /[*?]/
          v['patch'].sub(/(\d+)?[^\d]/, '\1\d+')
        when /^[0-9]+$/
          v['patch'].to_i
        end
  [maj, min, pat]
end