サイログ。

~雑多な記事置き場~

Rubyで実行中にGemの最新バージョンのパスを取得する方法

Ruby/SDL(Ruby 1.9用mswin32版)をgemでインストールするとき、dllをコピーするために、gemのインストール先パスを取得する方法を検討したので、その結果をメモで載せておきます。

# gemファイルを検索してくれる頼もしい存在
ps = Gem::GemPathSearcher.new
# init_gemspecs:インストールしているGem::Specificationインスタンスを検索
spec = ps.init_gemspecs.
# 指定のgem名の一覧を取得(バージョン番号違いのものがあるため)
          select{|sp| sp.name.match(/取り出したいGem名(例:rubysdl\-mswin32)/)}.
# 最新のバージョンを取得
          max_by{|sp| sp.version.to_s}
# installation_path: gemがインストールされているパス(lib/ruby/gems/1.9.1/)
full_path = spec.installation_path +
            "/gems/" +
            spec.full_name