2009-02-24

gem メソッドで gem ライブラリのバージョンを指定

21:07:06 wtnabe< ruby で require 時にバージョン指定することってできない

のかな
22:23:11 ma2> @wtnabe gemを使わないとダメなんじゃないでしょうか。
22:25:20 wtnabe< @ma2 えっと、require_gem でできるってことですか?
22:30:49 wtnabe< あー Kernel#gem か。なるほど。
23:15:35 wtnabe< @ma2 gem 'GEM_NAME', 'version'; require 'GEM_NAME' で
すね。ありがとうございます。
$ ri Kernel#gem
------------------------------------------------------------- Kernel#gem
     gem(gem_name, *version_requirements)
------------------------------------------------------------------------
     Use Kernel#gem to activate a specific version of +gem_name+.
(snip

例えば以下のように mechanzie 0.8.5 と 0.9.2 がインストールされているとします。

$ gem list -a mechanize

*** LOCAL GEMS ***

mechanize (0.9.2, 0.8.5)

普通に require すると当然バージョンは 0.9.2 になりますが、

$ ruby -e '
require "rubygems"
require "mechanize"
puts WWW::Mechanize::VERSION
'
0.9.2

gem メソッドでバージョンを明示するとそのバージョンを使うことができます。

$ ruby -e '
require "rubygems"
gem "mechanize", "0.8.5"
require "mechanize"
puts WWW::Mechanize::VERSION
'
0.8.5

この辺を見ると

RubyGems User Guide | RubyGems Manuals

ある特定バージョンだけでなく、「以降」、「以前」、これらを組み合わせた「範囲」も記述できるようです。なるへそ。

About

例によって個人のなんちゃらです