今日はAmon2-2.49のDSL周り。これで最後。
Amon2::Declare
$c じゃなくて c() 使えたらいいよねって話。内容物の中では、t/ 内のExtended::V::MT::Context にて、テンプレからcを呼び出せるようにするために使っている。
Amon2::Lite
Sinatra-ish な書き方ができるようにするもの。Amon2::Lite::_child_N という名前でコンテクストクラスを作る。Nは連番なので、package名さえ分ければ複数箇所から利用が可能*1。
use 元にはルーティングに必要な関数をエクスポートする。2.49 の実装では Router::Simple::Sinatraish は使わずに自前で実装している。さらにコンテキストにはdispatch と create_view が必須なのでこれらを実装。create_view では__DATA__ セクションを読むために初回呼び出し時までテンプレのロードを遅らせている。このときにuse 側のくらすにcreate_view メソッドを生やし、ロードが複数回走らないようにしている。デフォルトで作成されるビューは TT2Like。また、Liteではconfigディレクトリが無い可能性があるので、config/ ディレクトリが無くても落ちることがないようにload_config() メソッドを上書きしている。
その他
create_view で作成されるテンプレートにはrender メソッドが要求されるため、Xslate 以外のテンプレートを使うときにちょっと困るが、その場合はTiffany を経由させるとよい。その辺はLite の PODや t/apps/Extended のExtended::Web 辺りを見ればわかる。