class SemiSemantic::Version

Constants

POST_RELEASE_PREFIX
PRE_RELEASE_PREFIX

Attributes

post_release[R]
pre_release[R]
release[R]
segments[R]

Public Class Methods

new(release, pre_release=nil, post_release=nil) click to toggle source
# File lib/semi_semantic/version.rb, line 34
def initialize(release, pre_release=nil, post_release=nil)
  raise ArgumentError.new 'Invalid Release: nil' if release.nil?
  @release = release
  @pre_release = pre_release
  @post_release = post_release

  @segments = [release]
  @segments << pre_release unless pre_release.nil?
  @segments << post_release unless post_release.nil?
end
parse(version_string) click to toggle source

Parses a semi-semantic version string into up to three segments Raises a ParseError if the string format is invalid Raises an ArgumentError if version_string is nil

# File lib/semi_semantic/version.rb, line 16
def self.parse(version_string)
  raise ArgumentError.new 'Invalid Version String: nil' if version_string.nil?
  raise ArgumentError.new "Invalid Version String: '#{version_string}'" if version_string == ''
  matches = /^(?<release>[0-9A-Za-z_\.]+)(\-(?<pre_release>[0-9A-Za-z_\-\.]+))?(\+(?<post_release>[0-9A-Za-z_\-\.]+))?$/.match(version_string)
  raise ParseError.new "Invalid Version Format: '#{version_string}'" if matches.nil?

  release = VersionSegment.parse matches[:release]
  pre_release = nil
  if matches[:pre_release]
    pre_release = VersionSegment.parse matches[:pre_release]
  end
  post_release = nil
  if matches[:post_release]
    post_release = VersionSegment.parse matches[:post_release]
  end
  self.new(release, pre_release, post_release)
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/semi_semantic/version.rb, line 45
def <=>(other)
  result = (@release <=> other.release)
  return result unless result == 0

  unless @pre_release.nil? && other.pre_release.nil?
    return 1 if @pre_release.nil?
    return -1 if other.pre_release.nil?
    result = (@pre_release <=> other.pre_release)
    return result unless result == 0
  end

  unless @post_release.nil? && other.post_release.nil?
    return -1 if @post_release.nil?
    return 1 if other.post_release.nil?
    result = (@post_release <=> other.post_release)
    return result unless result == 0
  end

  0
end
to_s() click to toggle source
# File lib/semi_semantic/version.rb, line 66
def to_s
  str = @release.to_s
  str += PRE_RELEASE_PREFIX + @pre_release.to_s unless @pre_release.nil?
  str += POST_RELEASE_PREFIX + @post_release.to_s unless @post_release.nil?
  str
end