class Gem::Version

要約

文字列で表現されたバージョンを比較可能 (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" の部分だけが違いますが、アルファベット部分と数字部分が分割され、数字部分は整数の大小比較になるため、後者のほうが大きいと判定されます。

目次

特異メソッド
インスタンスメソッド

継承しているメソッド

Comparableから継承しているメソッド

特異メソッド

correct?(version) -> bool[permalink][rdoc]

version が正しいバージョンであれば真を返します。そうでなければ偽を返します。

[PARAM] 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
[PARAM] input:
Gem::Version のインスタンスか文字列を指定します。
[EXCEPTION] ArgumentError:
input がバージョンとして不正なオブジェクトである場合に発生します。

[SEE_ALSO] Gem::Version.correct?

インスタンスメソッド

self <=> other -> Integer | nil[permalink][rdoc]

self と other を比較して、self が大きい時に 1 等しい時に 0、小さい時に -1 の整数を返します。

[PARAM] other:
比較対象の Gem::Version のインスタンスを指定します。
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]

ダンプされた情報をロードします。

[PARAM] array:
バージョン情報を含む配列を指定します。
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 に書く