- 2011-05-02 (月)
- Ruby
rdoc コマンドにて生成される web page をブラウザで見ると、js やら images やらが欠如している事を発見。本来は生成される doc ディレクトリ下に js/ と images/ があり、その中に必要な jquery.js やら icon.png やらがあるのが本来の期待値な模様。この不具合のおかげで "click to view source code" をクリックする事で当該メソッドのソースコードが表示される便利機能が使えない。困った。
原因
Mac OS + RVM 環境で発生中。ググってみたら同現象について語ってる RubyForge のスレを発見。ここで問題のファイルを特定、コードを読んでみると js, images 資源を作成する RDoc 実装部分の:
js/images ディレクトリをコピーする際、
パスに dot (.) が含まれていたら無視する。
な記述がマズい模様。RVM 環境だとすべての Ruby + gem ソースが $HOME/.rvm 配下にあるゆえ。Oh。
該当 Ruby, RVM バージョン
$ ruby -v ruby 1.9.2p180 (2011-02-18 revision 30909) ... 略 $ rvm -v rvm 1.6.3 ... 略
解決策
当該 RubyForge スレでは最新の RDoc ソースに修正を commit 済みと書いてあるも、リポジトリのどのバージョンの commit なのか、diff を表示するリンクだとかが一切判らず (RubyForge の見方がわからん w)。とりあえず Ruby 1.9.2p180 には反映されておらず、仕方ないので自前実装で対処。多分こんな風に書けばいいはず。似たような実装どこかで書いたことあった気がする。
$ vim ~/.rvm/rubies/default/lib/ruby/1.9.1/rdoc/generator/darkfish.rb .. # 154行目 next if path =~ /#{File::SEPARATOR}\./ ..
これをこう直すべし:
next if path =~ /#{File::SEPARATOR}\.[^#{File::SEPARATOR}]+$/
ソースを直したら、もう一度 rdoc を再作成。
$ cd my-project $ rdoc $ ls -1 doc/ index.html js/ # よっしゃー img/ # ブラウザで開いて確認 $ open -a safari doc/index.html
対処完了
これでちっこいアイコン画像も表示されるようになり、件のソースコード AJAX ロード&表示する機能も無事動くようになった。んー RDoc ステキ。