Sha256: 0f9877e72ca177c692e975122db7e83a4132aa5716be290dc2dbd12e22904ba6

Contents?: true

Size: 1.01 KB

Versions: 279

Compression:

Stored size: 1.01 KB

Contents

# frozen_string_literal: true

module Avm
  # A sequence of segments of integer versions (Ex.: 2, 1.0.1, 3.0.0.0.0).
  class VersionNumber
    include ::Comparable

    SEGMENT_SEPARATOR = '.'

    class << self
      def segments_from_mixed(segments)
        (segments.is_a?(::Enumerable) ? segments.to_a : segments.to_s.split(SEGMENT_SEPARATOR))
          .map(&:to_i)
      end
    end

    attr_reader :segments

    def initialize(segments)
      @segments = self.class.segments_from_mixed(segments).freeze
    end

    delegate :[], to: :segments

    def <=>(other)
      segments <=> other.segments
    end

    def to_s
      segments.join(SEGMENT_SEPARATOR)
    end

    # @return [Avm::Version]
    def increment_segment(segment_index)
      x = [segments.count, segment_index + 1].max.times.map do |index|
        value = index < segments.count ? segments[index] : 0
        next value if index < segment_index
        next value + 1 if index == segment_index

        0
      end
      self.class.new x
    end
  end
end

Version data entries

279 entries across 279 versions & 3 rubygems

Version Path
avm-0.94.1 lib/avm/version_number.rb
eac_tools-0.98.0 sub/avm/lib/avm/version_number.rb
avm-0.94.0 lib/avm/version_number.rb
eac_tools-0.94.0 sub/avm/lib/avm/version_number.rb
avm-0.93.0 lib/avm/version_number.rb
eac_tools-0.92.0 sub/avm/lib/avm/version_number.rb
avm-0.92.0 lib/avm/version_number.rb
eac_tools-0.91.0 sub/avm/lib/avm/version_number.rb
avm-0.90.1 lib/avm/version_number.rb
eac_tools-0.87.1 sub/avm/lib/avm/version_number.rb
avm-0.90.0 lib/avm/version_number.rb
eac_tools-0.87.0 sub/avm/lib/avm/version_number.rb
avm-0.89.0 lib/avm/version_number.rb
eac_tools-0.86.12 sub/avm/lib/avm/version_number.rb
avm-0.88.0 lib/avm/version_number.rb
eac_tools-0.86.11 sub/avm/lib/avm/version_number.rb
avm-0.87.0 lib/avm/version_number.rb
eac_tools-0.86.8 sub/avm/lib/avm/version_number.rb
avm-0.86.2 lib/avm/version_number.rb
eac_tools-0.86.7 sub/avm/lib/avm/version_number.rb