Ruby
Rails
Gem

Gem(あるいはRails)のバージョン比較方法

More than 1 year has passed since last update.

不幸にもGemのバージョンを比較して処理を分岐させなければならないことってありますよね?

Railsでバージョン取得をするなら、みなさんおそらく以下のどれかで取得していることと思います。


Rails4.2.6でやってみた場合

Rails.version #=> "4.2.6"

# https://github.com/rails/rails/blob/master/version.rb
Rails::VERSION::MAJOR #=> 4
Rails::VERSION::MINOR #=> 2
Rails::VERSION::TINY #=> 6
Rails::VERSION::PRE #=> nil ("beta2"とかがあるなら入る)
Rails::VERSION::STRING #=> "4.2.6"


メジャーバージョンの比較でいいなら Rails::VERSION::MAJOR >= 4 でいいですし、

マイナーバージョンまでなら Rails.version.to_f >= 4.1 てな書き方で十分です。

ただ、厳密にやる場合、ないしパッチバージョンまで見る場合はどうすればいいのかな? と思っていたら以下のようにすれば良いようです。

Gem::Version.new(Rails.version) >= Gem::Version.new("4.1.2")

また、RailsならRails.gem_versionでこのGem::Versionのオブジェクトを返してくれるので、以下の書き方ができます。

Rails.gem_version >= Gem::Version.new("4.1.2")

あまりやってるの見かけないですが、厳密にバージョン比較したい方・しなければいけない方はやってみてはいかがでしょうか?