class Gem::Version

[edit]

要約

文字列で表現されたバージョンを比較可能 (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][edit]

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


p Gem::Version.correct?("9.1")       # => true
p Gem::Version.correct?("incorrect") # => false

p Gem::Version.correct?(nil)         # => true
# nil versions are discouraged and will be deprecated in Rubygems 4
# version が nil のときは true を返しますが、推奨はされず、Ruby 2.6以降では警告がでます。
[PARAM] version:
バージョンを文字列か数値で指定します。
create(input) -> Gem::Version | nil[permalink][rdoc][edit]

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?

new(version) -> Gem::Version[permalink][rdoc][edit]

バージョンを表す文字列から、Gem::Version インスタンスを作成します。

引数のバージョンを表す文字列とは、 数字かASCII文字の連続であり、ドットで区切られたものです。


p Gem::Version.new('1.2.0a') # => #<Gem::Version "1.2.0a">

# Ruby 2.4.1より、空白文字以外の文字がない場合、バージョンは "0" になります。
p Gem::Version.new(' ') #=> #<Gem::Version "0">
[PARAM] version:
[EXCEPTION] ArgumentError:
input がバージョンとして不正なオブジェクトである場合に発生します。これは Gem::Version.correct? により、判定されます。

インスタンスメソッド

self <=> other -> -1 | 0 | 1 | nil[permalink][rdoc][edit]

self と other を比較して、self が小さい時に -1、等しい時に 0、大きい時に 1 の整数を返します。また、other が Gem::Version ではなく比較できないとき、 nil を返します。


p Gem::Version.new("3.9.0") <=>  Gem::Version.new("3.10.0") # => -1
p Gem::Version.new("3.0.0") <=>  Gem::Version.new("3.0.0")  # =>  0
p Gem::Version.new("3.0.0") <=>  Gem::Version.new("3.0")    # =>  0

p Gem::Version.new("3.9.0") <=> "3.9.0" # => nil
[PARAM] other:
比較対象の Gem::Version のインスタンスを指定します。
bump -> Gem::Version[permalink][rdoc][edit]

最後の一桁を切り上げた新しい Gem::Version のインスタンスを返します。

ただし、英字のプレリリースの部分は、無視されます。


p Gem::Version.new('5.3.1').bump     # => #<Gem::Version "5.4">
p Gem::Version.new('5.3.1.a.1').bump # => #<Gem::Version "5.4">
p Gem::Version.new('5.3.1.3.1').bump # => #<Gem::Version "5.3.1.4">
eql?(other) -> bool[permalink][rdoc][edit]

self と other の Gem::Version#version のバージョンが等しいとき true を返します。そうでなければ false を返します。

Comparable を include して作られた == と異なり、"1.0" と "1" は異なるものと判定します。


ver0 = Gem::Version.create('1.0')   # #<Gem::Version "1.0">
ver1 = Gem::Version.create('1.0')   # #<Gem::Version "1.0">
ver2 = Gem::Version.create('1')     # #<Gem::Version "1">

p ver0.eql?(ver1)     # => true
p ver1.eql?(ver2)     # => false
p ver1 == ver2        # => true
marshal_dump -> Array[permalink][rdoc][edit]

完全なオブジェクトではなく、バージョン文字列のみダンプします。


p Gem::Version.new('1.2.0a').marshal_dump  # => ["1.2.0a"]
marshal_load(array) -> nil[permalink][rdoc][edit]

ダンプされた情報をロードし、自身を破壊的に変更します。


version = Gem::Version.new('')
version.marshal_load(["1.2.0a"])
p version # => #<Gem::Version "1.2.0a">
[PARAM] array:
バージョン情報を含む配列を指定します。
prerelease? -> bool[permalink][rdoc][edit]

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][edit]

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][edit]
to_s -> String

バージョン情報を文字列として返します。


version = Gem::Version.new("1.2.3a")
p version.to_s     # => "1.2.3a"
p version.version  # => "1.2.3a"

定数

Requirement -> Class[permalink][rdoc][edit]

Gem::Requirement のエイリアスです。


p Gem::Version::Requirement == Gem::Requirement  # => true