文字列で表現されたバージョンを比較可能 (Comparable) にするためのクラスです。
バージョンを文字列で表したとき、単純に String#<=> で比較すると、 "1.9" のほうが "1.10" よりも大きい(バージョンが高い)ことになってしまい、正しく判定できません。 Gem::Version はこの問題を解決します。
文字列での比較と Gem::Version での比較
p "1.9" < "1.10" # => false
p Gem::Version.new("1.9") < Gem::Version.new("1.10") # => true
gem のバージョンを取り扱うためのクラスですが、バージョン表記が RubyGems の流儀に則っていれば RubyGems とは無関係に使うこともできます。
バージョン表記のソートの例
versions = %w[ 1.1  1.10  1.9  1.1.beta9  1.1.beta10 ]
p versions.sort_by{ |v| Gem::Version.new(v) }
# => ["1.1.beta9", "1.1.beta10", "1.1", "1.9", "1.10"]
上の例で、"1.9" と "1.10" では(数字列ではなく)整数として 9 より 10 が大きいので、"1.10" のほうが大きいと判定されています。
また、"1.1.beta9" は "beta9" の部分が数字でないものを含んでいるので "1.1" の「プレリリース」バージョンであるとみなされます。この規則により、"1.1" と "1.1.beta9" では後者のほうが小さいと判定されています。
"1.1.beta9" と "1.1.beta10" では、"beta9" と "beta10" の部分だけが違いますが、アルファベット部分と数字部分が分割され、数字部分は整数の大小比較になるため、後者のほうが大きいと判定されます。
correct?(version) -> bool[permalink][rdoc]version が正しいバージョンであれば真を返します。そうでなければ偽を返します。
create(input) -> Gem::Version | nil[permalink][rdoc]Gem::Version のインスタンスを作成するためのファクトリメソッドです。
例:
ver1 = Gem::Version.create('1.3.17')   # => #<Gem::Version "1.3.17">
ver2 = Gem::Version.create(ver1)       # => #<Gem::Version "1.3.17">
ver3 = Gem::Version.create(nil)        # => nil
[SEE_ALSO] Gem::Version.correct?
self <=> other -> Integer | nil[permalink][rdoc]self と other を比較して、self が大きい時に 1 等しい時に 0、小さい時に -1 の整数を返します。
bump -> Gem::Version[permalink][rdoc]最後の一桁を切り上げた新しい Gem::Version のインスタンスを返します。
例:
ver1 = Gem::Version.create('5.3.1') # => #<Gem::Version "5.3.1">
ver2 = ver1.bump                    # => #<Gem::Version "5.4">
eql?(other) -> bool[permalink][rdoc]self と other の Gem::Version#version が等しいとき真を返します。そうでなければ偽を返します。
例:
ver1 = Gem::Version.create('1.0')   # => #<Gem::Version "1.0">
ver2 = Gem::Version.create('1')     # => #<Gem::Version "1">
ver3 = Gem::Version.create('1.2.3') # => #<Gem::Version "1.2.3">
ver1.eql?(ver2)                     # => true
ver1.eql?(ver3)                     # => false
marshal_dump -> Array[permalink][rdoc]完全なオブジェクトではなく、バージョン文字列のみダンプします。
marshal_load(array) -> String[permalink][rdoc]ダンプされた情報をロードします。
prerelease? -> bool[permalink][rdoc]self がプレリリースと思われる文字を含むバージョンかどうかを返します。
例
Gem::Version.new('1.2.0a').prerelease? # => true
Gem::Version.new('1.2.0').prerelease?  # => false
[SEE_ALSO] Gem::Version#release
release -> Gem::Version[permalink][rdoc]self をリリースバージョンにした Gem::Version オブジェクトを返します。
プレリリースではないバージョンであれば self を返します。
例
Gem::Version.new('1.2.0a').release # => #<Gem::Version "1.2.0">
Gem::Version.new('1.2.0').release  # => #<Gem::Version "1.2.0">
[SEE_ALSO] Gem::Version#prerelease?
version -> String[permalink][rdoc]to_s -> Stringバージョン情報を文字列として返します。
version=(version)[permalink][rdoc]self のバージョン情報を書き換えます。
[TODO] Gem::Requirement に書く