nazoking/openfire_admin

View on GitHub
lib/openfire_admin/version_string.rb

Summary

Maintainability
A
55 mins
Test Coverage
module OpenfireAdmin
  class VersionString
    def initialize(version)
      @version = version.to_s.strip.split(/\./)
    end
    def <=>(othre)
      compare(@version.dup, othre.kind_of?(VersionString) ? othre.to_a.dup : othre.to_s.strip.split(/\./))
    end
    def > other
      (self <=> other) == 1
    end
    def < other
      (self <=> other) == -1
    end
    def >= other
      (self <=> other) >= 0
    end
    def <= other
      (self <=> other) <= 0
    end
    def == other
      (self <=> other) == 0
    end
    def to_s
      "VersionString(#{@version.join(".")})"
    end
    def to_a
      @version
    end
    private
    def compare(me,othre)
      m = me.shift
      o = othre.shift
      if m.nil?
        return o.nil? ? 0 : -1
      elsif o.nil?
        return 1
      end
      md = m.to_i
      od = o.to_i
      rd = md <=> od
      if rd == 0
        m.sub!(/^\d*/,'')
        o.sub!(/^\d*/,'')
        rd = m <=> o
        rd = compare(me,othre) if rd == 0
      end
      rd
    end
  end
end