diff --git a/lib/Mojolicious/Plugin/TtRenderer/Engine.pm b/lib/Mojolicious/Plugin/TtRenderer/Engine.pm index 2e63122..035b8b6 100644 --- a/lib/Mojolicious/Plugin/TtRenderer/Engine.pm +++ b/lib/Mojolicious/Plugin/TtRenderer/Engine.pm @@ -12,6 +12,7 @@ use Mojo::ByteStream 'b'; use Template (); use Cwd qw/abs_path/; use Scalar::Util 'weaken'; +use POSIX ':errno_h'; __PACKAGE__->attr('tt'); @@ -87,11 +88,26 @@ sub _render { my $provider = $self->tt->{SERVICE}->{CONTEXT}->{LOAD_TEMPLATES}->[0]; $provider->options($options); $provider->ctx($c); - $provider->not_found(0); - my $ok = $self->tt->process(defined $inline ? \$inline : $t, @params); + my $ok = do { + if (defined $inline) { + $self->tt->process(\$inline, @params); + } + else { + my @ret = $provider->fetch($t); - return 0 if $provider->not_found; + if (not defined $ret[1]) { + $self->tt->process($ret[0], @params); + } + elsif (not defined $ret[0]) { # not found + return 0; + } + else { # error + return 0 if $! == ENOENT && (not ref $ret[0]); # not found when not blessed exception + die $ret[0]; + } + } + }; # Error die $self->tt->error unless $ok; diff --git a/t/default_template2.t b/t/default_template2.t new file mode 100644 index 0000000..290a209 --- /dev/null +++ b/t/default_template2.t @@ -0,0 +1,36 @@ +use strict; +use warnings; +use Test::More tests => 3; +use Test::Mojo; +use File::Temp qw( tempdir ); +use FindBin '$Bin'; + +use Mojolicious::Lite; +use Mojolicious::Plugin::TtRenderer::Engine (); + +my $tt = Mojolicious::Plugin::TtRenderer::Engine->build( + mojo => app, + template_options => { + UNICODE => 1, + ENCODING => 'UTF-8', + INCLUDE_PATH => "$Bin/templates", + } +); + +app->renderer->add_handler(tt => $tt); +app->renderer->default_handler('tt'); + +get '/' => sub { + die 'foo'; +}; + +my $t = Test::Mojo->new; + +$t->get_ok('/') + ->status_is(500) + ->content_like(qr{foo}); + +__DATA__ + +@@ index.html.tt +anything