class Hashie::Extensions::RubyVersion

Attributes

segments[RW]

Public Class Methods

new(version) click to toggle source
# File lib/hashie/extensions/ruby_version.rb, line 22
def initialize(version)
  @segments = split_to_segments(version)
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/hashie/extensions/ruby_version.rb, line 26
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

Private Instance Methods

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