Sha256: 3cddbcaea84505644ace78b07f611d900fc97f6e3dc375301d29d33b867526e9

Contents?: true

Size: 1.15 KB

Versions: 42

Compression:

Stored size: 1.15 KB

Contents

# encoding: utf-8

module OneApm
  class VersionNumber
    include Comparable

    attr_reader :parts

    def initialize(version_string)
      version_string ||= '1.0.0'
      @parts = version_string.split('.').map{|n| n =~ /^\d+$/ ? n.to_i : n}
    end

    def major_version; @parts[0]; end
    def minor_version; @parts[1]; end
    def tiny_version;  @parts[2]; end

    def <=>(other)
      other = self.class.new(other) if other.is_a? String
      self.class.compare(self.parts, other.parts)
    end

    def to_s
      @parts.join(".")
    end

    def hash
      @parts.hash
    end

    def eql? other
      (self <=> other) == 0
    end

    private

    def self.compare(parts1, parts2)
      a, b = parts1.first, parts2.first
      case
        when a.nil? && b.nil? then 0
        when a.nil? then b.is_a?(Fixnum) ?  -1 : 1
        when b.nil? then -compare(parts2, parts1)
        when a.to_s == b.to_s then compare(parts1[1..-1], parts2[1..-1])
        when a.is_a?(String) then b.is_a?(Fixnum) ?  -1 : (a <=> b)
        when b.is_a?(String) then -compare(parts2, parts1)
        else # they are both fixnums, not nil
          a <=> b
      end
    end
  end
end

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
oneapm_rpm-1.2.9.rc1 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.8 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.8.rc1 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.7 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.7.rc1 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.6 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.6.rc1 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.5 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.5.rc1 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.4 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.4.rc1 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.3 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.3.rc2 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.2 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.2.rc lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.1 lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.1.rc lib/one_apm/support/version_number.rb
oneapm_rpm-1.2.0 lib/one_apm/support/version_number.rb
oneapm_rpm-1.1.3 lib/one_apm/support/version_number.rb
oneapm_rpm-1.1.2 lib/one_apm/support/version_number.rb