class Epuber::Version

Constants

VERSION_RE

Attributes

version[R]

Public Class Methods

correct?(version) click to toggle source

True if the version string matches RubyGems’ requirements.

# File lib/epuber/vendor/version.rb, line 17
def self.correct?(version)
  version.to_s =~ VERSION_RE
end
new(version) click to toggle source

@param [String, Numeric] version input primitive value for version

# File lib/epuber/vendor/version.rb, line 26
def initialize(version)
  raise StandardError, "Malformed version number string #{version}" unless self.class.correct?(version)

  @version = version.to_s.strip
end

Public Instance Methods

<=>(other) click to toggle source

Compares this version with other returning -1, 0, or 1 if the other version is larger, the same, or smaller than this one.

@return [Numeric]

# File lib/epuber/vendor/version.rb, line 52
def <=>(other)
  return unless other.is_a?(Version) || other.is_a?(String) || other.is_a?(Float) || other.is_a?(Integer)

  other = Version.new(other) unless other.is_a?(Version)

  return 0 if @version == other.version

  lhsegments = segments
  rhsegments = other.segments

  lhsize = lhsegments.size
  rhsize = rhsegments.size
  limit  = [lhsize, rhsize].max - 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) && number?(rhs)
    return  1 if number?(lhs) && rhs.is_a?(String)

    return lhs <=> rhs
  end

  0
end
segments() click to toggle source

@return [Array<Numeric>]

# File lib/epuber/vendor/version.rb, line 34
def segments
  @segments ||= @version.scan(/[0-9]+|[a-z]+/i).map do |s|
    /^\d+$/ =~ s ? s.to_i : s
  end
end
to_s() click to toggle source

@return [String]

# File lib/epuber/vendor/version.rb, line 42
def to_s
  segments.join('.').to_s
end