class With::Version::Ruby::Version

Attributes

segments[RW]

Public Class Methods

new(version) click to toggle source
# File lib/with-version/ruby/version.rb, line 25
def initialize(version)
  @version = version
  @segments = split_to_segments(version)
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/with-version/ruby/version.rb, line 30
def <=>(other)
  lhsegments = segments
  rhsegments = other.segments

  lhsize = lhsegments.size
  rhsize = rhsegments.size
  limit  = (lhsize > rhsize ? lhsize : rhsize) - 1

  i = 0

  while i <= limit
    lhs = lhsegments[i] || 0
    rhs = rhsegments[i] || 0
    i += 1

    next      if lhs == rhs
    return -1 if lhs.is_a?(String) && rhs.is_a?(Numeric)
    return  1 if lhs.is_a?(Numeric) && rhs.is_a?(String)

    return lhs <=> rhs
  end

  0
end
prerelease?() click to toggle source
# File lib/with-version/ruby/version.rb, line 55
def prerelease?
  !!(@version =~ /[a-zA-Z]/)
end
release() click to toggle source
# File lib/with-version/ruby/version.rb, line 59
def release
  if prerelease?
    segments = @segments.dup
    segments.pop while segments.any? { |s| String === s }
    self.class.new segments.join('.')
  else
    self
  end
end

Private Instance Methods

split_to_segments(version) click to toggle source
# File lib/with-version/ruby/version.rb, line 71
def split_to_segments(version)
  version.scan(/[0-9]+|[a-z]+/i).map do |segment|
    /^\d+$/ =~ segment ? segment.to_i : segment
  end.freeze
end