class Fv::Parser
Constants
- PART_REGEXP
Public Class Methods
parse(version)
click to toggle source
# File lib/fv/parser.rb, line 6 def parse(version) return version if version.is_a?(V) normalized_version = version.to_s.split('+').first # Remove metadata major, minor, patch = normalized_version.split('.', 3) major = validate_part major, name: 'major' minor = validate_part minor, name: 'minor' patch = validate_part patch, name: 'patch', only_integer: false V.new(major, minor, patch) end
Private Class Methods
validate_part(part, name: nil, only_integer: true, non_negative: true)
click to toggle source
# File lib/fv/parser.rb, line 21 def validate_part(part, name: nil, only_integer: true, non_negative: true) name = name.capitalize is_integer = true part = begin Integer(part) rescue ArgumentError => e raise unless e.message =~ /invalid value for Integer/ raise WrongVersionError, "#{name} version must be integer" if only_integer is_integer = false # Allow part to be not an integer part end if only_integer && non_negative && part < 0 raise WrongVersionError, "#{name} version cannot be negative" end if !is_integer && part !~ PART_REGEXP raise WrongVersionError, "#{name} can contain only ASCII alphanumerics and hyphen" end part end