文字列で表現されたバージョンを比較可能 (Comparable) にするためのクラスです。
バージョンを文字列で表したとき、単純に String#<=> で比較すると、 "1.9" のほうが "1.10" よりも大きい(バージョンが高い)ことになってしまい、正しく判定できません。 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 に書く