[ruby][rake]rakeが実行されるまでを調べる(2)

仕切り直しで・・


Rake::Application#run

コメントにあるとおりinit、load_rakefile、top_levelの3ステップを実行。
3ステップのそれぞれのメソッドの中の処理はstandard_exception_handlingメソッドのブロックとして実行している。

Rake::Application#standard_exception_handling

名のとおり例外処理
init、load_rakefile、top_levelメソッドの中からの別のメソッドの呼び出しは、standard_exception_handlingメソッドに渡すブロックとして実行している。
こうすることで例外処理を1つにまとめるテクの模様。

Rake::Application#init
  • collect_tasks()
    • rakeコマンドに渡す文字列で「hoge=bar」形式のものをENV[hoge]=barに設定。
    • 「hoge=bar」形式でないものはトップレベルのタスクとされる。
Rake::Application#load_rakefile

このあとがややこしい。
load_imports()がややこしい。
invoke()がなにやってるかまでいけない。
@pending_importsに入ってるのは
\*.rakeファイルのフルパスで、これを引数にRake::TaskManager#lookupを呼び出す。。呼び出す。。
rake実行時にrakelibを渡さなければここはスルーだけど。。

Rake::Application#top_level

基本はinit()で設定したトップレベルのタスクをinvokeするだけ。



疑問
  • Rake::Applicationのメソッドを全部publicにしてる意味あるのか?
    • (こっからprivateだよ、みたいなコメントがあるが・・)
  • Module(Rake::TaskManager)のinitializeメソッドって?
    • はっ。モジュールをincludeしたクラスのinitializeのsuperから呼び出されるのか!=>参考