RubyGems でインストールしたライブラリのパス名

AP4R で、サーバ側は ActiveSupport への依存性が無い方が何かと良いかなぁ、と考えて、ちょっとコードをいじっています。気持ちとしては、コアライブラリへの拡張は欲しい(Module#mattr_accessor とか、Number#hours とか)のだけど、自動リロードが気持ち悪い。とういわけで、'active_support/core_ext' だけ読み込んで出来ないかなぁと。
素直に、'rubygems' を読んで、'active_support/core_ext' を読みにいくと、'xml_simple' が無いよというエラーが発生。ちょっと見てみると、active_suport/vendor/xml_simple.rb がそれだ。active_support.rb の中では、$: に自身のファイルパスを使って、 'active_support/vendor' を追加しているのだけど、外からどうにかしたい。
Gem.methods(false) を見てみると、required_location という良さげな名前のメソッドを発見。

% grep required_location /usr/local/ruby/1.8.6/lib/ruby/site_ruby/1.8/**/*
/usr/local/ruby/1.8.6/lib/ruby/site_ruby/1.8/rubygems.rb:
  def required_location(gemname, libfile, *version_constraints)

ほほう〜。

shino@shino-imac% irb -f --simple-prompt 
>> require 'pp'
...
>> require 'rubygems'
...
>> gem 'activesupport'
...
>> pp $:
["/usr/local/ruby/gemrepository/gems/activesupport-1.4.2/bin",
 "/usr/local/ruby/gemrepository/gems/activesupport-1.4.2/lib", 
 "/usr/local/ruby/1.8.6/lib/ruby/site_ruby/1.8", 
 "/usr/local/ruby/1.8.6/lib/ruby/site_ruby/1.8/i686-darwin8.9.1", 
 "/usr/local/ruby/1.8.6/lib/ruby/site_ruby", "/usr/local/ruby/1.8.6/lib/ruby/1.8", 
 "/usr/local/ruby/1.8.6/lib/ruby/1.8/i686-darwin8.9.1", "."]
=> nil
>> asv = Gem.required_location 'activesupport', 'active_support/vendor'
=> "/usr/local/ruby/gemrepository/gems/activesupport-1.4.2/lib/active_support/vendor"
>> $:.unshift asv
>> require 'active_support/core_ext'
=> true
>> ActiveSupport
=> ActiveSupport
>> Reloadable
NameError: uninitialized constant Reloadable
...
>> 2.hours
=> 7200

とここまで書いて、ActiveSupport に依存してもまぁ良いかという気になってきた。せっかく便利なものが有るんだから、明確に問題が有る訳でもないのに制限するのは良くない。ま、RubyGems の使い方を一つ覚えたということで。