Amon2で$c->render()をwrapした$c->auto_render()を作ってみた。
 2014年7月4日
毎回$c->render()にテンプレート指定するのがアレなんで指定しなくて良いようにしてみた。
ま、$cに別のrenderを作って、その中から通常のrenderを呼ぶ感じで。
package MyApp;
sub auto_render{
    my ( $self, $stash ) = @_;
    # 呼び出し元取得 // $path = 'MyApp::Web::C::Root::index'
    my $path = (caller 1)[3];
    # Root::indexだけにする // $path = 'Root::index'
    $path =~ s/MyApp::Web::C:://;
    # ::を/に // $path = 'Root/index'
    $path =~ s/\:\:/\//g;
    # 全部小文字に // $path = 'root/index'
    $path = lc $path;
    # renderを呼ぶ
    return $self->render($path . '.tt', $stash );
}
これで、$c->auto_renderが追加されました。
 あとは、Cから呼ぶだけ。
sub index {
    my ( $class, $c, $args ) = @_;
    return $c->auto_render({});
}
これで毎回テンプレートを呼ばなくても呼び出し元からpathを作ってテンプレートを使える。
 ただ、Root.pmの時は、tmpl/index.ttじゃなくて、tmpl/root/index.ttになる。。
 このくらいなら分岐するまでもないので、tmpl/rootを作った。