Gemを作るのが面倒になってきたので、githubから直接requireできたら楽になるかもしれないと思い、試してみました。

ruby>>
def git(uri, sha1, options = {})
require "tmpdir"
basename = File.basename(uri)
outdir = File.join(Dir.tmpdir, basename, sha1)
unless File.exist?(outdir)
sh = proc{|command| IO.popen("#{command} 2>&1"){|io| io.read}}
sh["git clone #{uri} #{outdir}"]
sh["cd #{outdir}; git checkout #{sha1}"]
end
$:.unshift File.join(outdir, 'lib')
require options[:require_as] || basename.split(/.git$/)[0]
end
<<--

Dir.tmpdirを使ってOSのテンポラリディレクトリの下にリポジトリをクローンしてきて、指定したリビジョンをcheckoutし、LOAD_PATHに"lib"を加えて、リポジトリ名のファイルをrequireしています。

意外と普通にgemの代わりに使える感じです。

posted by genki genki on Thu 16 Jul 2009 at 17:34 with 0 comments