LoginSignup
2
2

More than 5 years have passed since last update.

読み込んだgemのバージョンによって処理を分ける

Posted at

バージョンによるAPIの違いを吸収するような時に。

gem_version_more?(name, version)

require 'rubygems'

# gem_version_more?('rroonga', '2.1.0')  #=> rroongaが2.1.0以上ならtrue
def gem_version_more?(name, version)
  Gem.loaded_specs[name].version >= Gem::Version.new(version)
end
  • Gem.loaded_specsから指定した名前のgemのバージョンを取得
  • Gem::Versionを使って文字列からバージョン情報の作成

使用例

rroonga2.1.0からGroonga::Table#sortの返り値がArrayからGroonga::Arrayに変更となったため、以下の関数で違いを吸収しました。

milkode/lib/milkode/common/util.rb
# 互換性保持のため
def groonga_table_sort(table, keys, options = {})
  if gem_version_more?('rroonga', '2.1.0')
    table.sort(keys, options).map{|r| r.value}
  else
    table.sort(keys, options)
  end
end

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2