From d45efa54059249eccc04d995c21f105f45fdf549 Mon Sep 17 00:00:00 2001 From: Rafael Kitover Date: Wed, 9 Jan 2013 13:13:53 -0500 Subject: [PATCH 1/2] failing test for not returning not found correctly --- t/default_template2.t | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 t/default_template2.t 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 From 4225658dbc886da953c2e2fee1e75b13fc7f48ef Mon Sep 17 00:00:00 2001 From: Rafael Kitover Date: Wed, 9 Jan 2013 12:18:09 -0500 Subject: [PATCH 2/2] 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;