class RSpec::Support::ComparableVersion

@private

Attributes

Public Class Methods

# File rspec-support/lib/rspec/support/comparable_version.rb, line 11
def initialize(string)
  @string = string
end

Public Instance Methods

# File rspec-support/lib/rspec/support/comparable_version.rb, line 15
def <=>(other)
  other = self.class.new(other) unless other.is_a?(self.class)

  return 0 if string == other.string

  longer_segment_count = [self, other].map { |version| version.segments.count }.max

  longer_segment_count.times do |index|
    self_segment = segments[index] || 0
    other_segment = other.segments[index] || 0

    if self_segment.class == other_segment.class
      result = self_segment <=> other_segment
      return result unless result == 0
    else
      return self_segment.is_a?(String) ? -1 : 1
    end
  end

  0
end
# File rspec-support/lib/rspec/support/comparable_version.rb, line 37
def segments
  @segments ||= string.scan(/[a-z]+|\d+/i).map do |segment|
    if segment =~ /\A\d+\z/
      segment.to_i
    else
      segment
    end
  end
end