Amon2で$c->render()をwrapした$c->auto_render()を作ってみた。

毎回$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を作った。