Gemを作るのが面倒になってきたので、githubから直接requireできたら楽になるかもしれないと思い、試してみました。
1 def git(uri, sha1, options = {})
2 require "tmpdir"
3 basename = File.basename(uri)
4 outdir = File.join(Dir.tmpdir, basename, sha1)
5 unless File.exist?(outdir)
6 sh = proc{|command| IO.popen("#{command} 2>&1"){|io| io.read}}
7 sh["git clone #{uri} #{outdir}"]
8 sh["cd #{outdir}; git checkout #{sha1}"]
9 end
10 $:.unshift File.join(outdir, 'lib')
11 require options[:require_as] || basename.split(/\.git$/)[0]
12 end
Dir.tmpdirを使ってOSのテンポラリディレクトリの下にリポジトリをクローンしてきて、指定したリビジョンをcheckoutし、LOAD_PATHに"lib"を加えて、リポジトリ名のファイルをrequireしています。
意外と普通にgemの代わりに使える感じです。