RubyとRailsで特定のバージョン下でのみ適用したいパッチを書く方法

はじめに

RubyRailsで、特定のバージョン下において適用したいパッチを書く方法を調べたのでまとめました。

実装例

以下の通りです。

if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.0.0')
  # Ruby 2系で適用したいパッチ
end

if Gem::Version.new(Rails.version) < Gem::Version.new(4)
  # Rails 3系以下で適用したいパッチ
end

解説

バージョン番号の取得

実行時のRubyRailsのバージョンは以下のようにして取得できます。

RUBY_VERSION
#=> "2.2.1"

Rails.version
#=> "4.2.1"

バージョン番号の比較

Rubyでは、バージョンの各番号は1桁なので、単純に文字列の比較を行うだけでいいんですが、Railsではそうもいきません。
そこで、Gem::Versionクラスを利用して比較を行います。

'4.1.2' < '4.1.10'
# => false
Gem::Version.new('4.1.2') < Gem::Version.new('4.1.10')
# => true

おわりに

そもそもパッチを書かないといけない状況があんまよくないので、何とかしましょうという話ではある。