From 4225658dbc886da953c2e2fee1e75b13fc7f48ef Mon Sep 17 00:00:00 2001 From: Rafael Kitover Date: Wed, 9 Jan 2013 12:18:09 -0500 Subject: [PATCH] report not finding a template correctly TtRenderer was dying with a 'not found' error when a template was not found, instead of returning 0, which was interfering with things like the error screen. Use $provider->fetch to find templates and return 0 when a template is not found. --- lib/Mojolicious/Plugin/TtRenderer/Engine.pm | 22 ++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) 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;