From 6c41246e57affad027dbc36529a7a601debf2824 Mon Sep 17 00:00:00 2001 From: asergei Date: Wed, 2 Apr 2014 13:43:20 +0400 Subject: [PATCH] Make TT's INCLUDE_PATH always point to app's views directory --- MANIFEST | 2 ++ lib/Dancer/Template/TemplateToolkit.pm | 12 +++++++++--- t/10_template/05_template_toolkit.t | 13 ++++++++++--- t/10_template/views2/composite.tt | 1 + t/10_template/views2/includes/header.tt | 1 + 5 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 t/10_template/views2/composite.tt create mode 100644 t/10_template/views2/includes/header.tt diff --git a/MANIFEST b/MANIFEST index 2825f3806..da9ffd8eb 100644 --- a/MANIFEST +++ b/MANIFEST @@ -244,6 +244,8 @@ t/10_template/views/index.ts t/10_template/views/index.tt t/10_template/views/layouts/main.ts t/10_template/views/layouts/main.tt +t/10_template/views2/composite.tt +t/10_template/views2/includes/header.tt t/11_logger/000_create_fake_env.t t/11_logger/01_abstract.t t/11_logger/02_factory.t diff --git a/lib/Dancer/Template/TemplateToolkit.pm b/lib/Dancer/Template/TemplateToolkit.pm index 5528d8c69..8afd0b869 100644 --- a/lib/Dancer/Template/TemplateToolkit.pm +++ b/lib/Dancer/Template/TemplateToolkit.pm @@ -6,7 +6,7 @@ use Carp; use Dancer::Config 'setting'; use Dancer::ModuleLoader; use Dancer::Exception qw(:all); - +use Scalar::Util qw(weaken); use base 'Dancer::Template::Abstract'; my $_engine; @@ -26,9 +26,15 @@ sub init { my @anycase = $is_subclass ? () : ( ANYCASE => 1 ); my @absolute = $is_subclass ? () : ( ABSOLUTE => 1 ); + weaken(my $copy_self = $self); my @inc_path = $is_subclass ? () - : ( INCLUDE_PATH => $self->config->{INCLUDE_PATH} || setting('views') ); - + : ( INCLUDE_PATH => [ sub { + my $delim = $copy_self->config->{DELIMITER}; + # tweak delim to ignore C:/ + $delim //= $^O eq 'MSWin32' ? ':(?!\\/)' : ':'; + [ split /$delim/, $copy_self->config->{INCLUDE_PATH} || setting('views') ] } + ] ); + my $start_tag = $is_subclass ? $self->config->{start_tag} : $self->config->{start_tag} || '<%'; diff --git a/t/10_template/05_template_toolkit.t b/t/10_template/05_template_toolkit.t index 1fa84807d..54d90aafb 100644 --- a/t/10_template/05_template_toolkit.t +++ b/t/10_template/05_template_toolkit.t @@ -1,4 +1,4 @@ -use Test::More; +use Test::More import => ['!pass']; use strict; @@ -9,11 +9,13 @@ use Dancer::FileUtils 'path'; use File::Spec; use lib File::Spec->catdir( 't', 'lib' ); use EasyMocker; +use Dancer; + BEGIN { plan skip_all => "need Template to run this test" unless Dancer::ModuleLoader->load('Template'); - plan tests => 7; + plan tests => 8; use_ok 'Dancer::Template::TemplateToolkit'; }; @@ -36,7 +38,7 @@ is $@, '', "Template dependency is not triggered if Template is there"; # as a file path -my $template = path('t', '10_template', 'index.txt'); +my $template = File::Spec->rel2abs(path('t', '10_template', 'index.txt')); my $result = $engine->render( $template, { var1 => 1, @@ -71,3 +73,8 @@ like $@, qr/doesn't exist or not a regular file/, "prorotype failure detected"; $result = $engine->render(\$template, { one => 1, two => 2, three => 3}); is $result, $expected, "processed a template given as a scalar ref"; + +setting views => path(setting('appdir'), 'views2'); +$template = File::Spec->rel2abs(path('t', '10_template', 'views2', 'composite.tt')); +$result = $engine->render($template); +is $result, 'foo bar', "changed views directory and processed a template with includes"; \ No newline at end of file diff --git a/t/10_template/views2/composite.tt b/t/10_template/views2/composite.tt new file mode 100644 index 000000000..888c403aa --- /dev/null +++ b/t/10_template/views2/composite.tt @@ -0,0 +1 @@ +<% INCLUDE "includes/header.tt" %> bar \ No newline at end of file diff --git a/t/10_template/views2/includes/header.tt b/t/10_template/views2/includes/header.tt new file mode 100644 index 000000000..191028156 --- /dev/null +++ b/t/10_template/views2/includes/header.tt @@ -0,0 +1 @@ +foo \ No newline at end of file