今日は Amon2-2.49 のscaffoldの作成まで。具体的にはAmon2::Setup:: 名前空間の部分。
amon2-setup.pl
script/amon2-setup.pl がscaffoldの作成スクリプトだが、これは各フレーバーをnew->runしてるだけ。フレーバはAmon2::Setup::Flavor:: という名前空間に置かれるが、+指定で好きな名前空間のものも読めそう。
Amon2::Setup::Flavor
Amon2::Setup::Flavor はフレーバーのスーパークラスで、ファイルを特定のPATHに吐き出す write_file などを提供する。write_file に渡すファイル名は、<<hoge>>の形式で変数を利用可能。ファイルの内容はXslateで解釈されるが、タグは <% hoge %> の形式。
Amon2-2.49のコアパッケージには、Basic, Minimum, Liteの3つのフレーバーがある。Liteは Amon2::Lite 用。Basic は Minimum を継承しているが、全てのメソッドをオーバーライドしてるので継承してる意味はあまりなし?*1 Minimumだとperl関連のファイルしか作られないが、BasicだとDB関連のファイルやhtml, js, css 関連のファイルまで用意される。lib/ 以下の .pm ファイルだけ見ると、Minimumでは2ファイル、Basicでは3ファイルと非常にシンプル。MinimumではDispatch.pm (Router::Simpleのラッパー)がない。他、t/*.tやMakefile.PLやapp.psgiが作られる。他、違いはWeb.pmでプラグインを読むかどうか程度。
Amon2::Setup::Asset
あと、Amon2::Setup:: 名前空間には他にAmon2::Setup::Asset:: という名前空間があって、jQueryとblueprintの中身を文字列として持つモジュールがある。なぜファイルを直接同梱しないのかなーとも思ったのだけど*2 *3、Amon2::Setup::Asset::jQuery を見るとjQueryのファイル名を表すjquery_min_basename() って情報を持っていてこれを自動生成されるhtmlでJSをインクルードするときに使っているので、恐らくこういうメタ情報を一緒に管理したかったのかなーと予想。
Asset 類は author/assets.pl で自動生成されるもので、恐らくパッケージングの際に実行していると思われる。