[Jifty-commit] r2395 - in Template-Declare: lib/Template t
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Sat Dec 16 22:48:27 EST 2006
Author: jesse
Date: Sat Dec 16 22:48:26 2006
New Revision: 2395
Added:
Template-Declare/t/roots.t
Modified:
Template-Declare/ (props changed)
Template-Declare/lib/Template/Declare.pm
Log:
r46221 at pinglin: jesse | 2006-12-16 21:30:23 -0500
* Added support for multiple template roots to template::declare
Modified: Template-Declare/lib/Template/Declare.pm
==============================================================================
--- Template-Declare/lib/Template/Declare.pm (original)
+++ Template-Declare/lib/Template/Declare.pm Sat Dec 16 22:48:26 2006
@@ -75,17 +75,17 @@
my $template_name = shift;
my $show_private = shift;
- foreach my $package (@{Template::Declare->roots}) {
+ foreach my $package (reverse @{Template::Declare->roots}) {
-
if ( my $coderef = $package->can( _template_name_to_sub($template_name) ) ) {
return $coderef;
}
- elsif ($show_private) {
- return $package->can( _template_name_to_private_sub($template_name) );
+ elsif ($show_private and $coderef =$package->can( _template_name_to_private_sub($template_name) )) {
+ return $coderef;
}
}
+ return undef;
}
sub _template_name_to_sub {
Added: Template-Declare/t/roots.t
==============================================================================
--- (empty file)
+++ Template-Declare/t/roots.t Sat Dec 16 22:48:26 2006
@@ -0,0 +1,97 @@
+use warnings;
+use strict;
+
+package Wifty::UI;
+use base qw/Template::Declare/;
+use Template::Declare::Tags;
+
+template simple => sub {
+
+ html {
+ head {};
+ body { show 'private-content'; };
+ }
+
+};
+
+private template 'private-content' => sub {
+ with( id => 'body' ), div {
+ outs('This is my content');
+ };
+};
+
+package Baseclass::UI;
+use base qw/Template::Declare/;
+use Template::Declare::Tags;
+private template 'private-content' => sub {
+ with( id => 'body' ), div {
+ outs('This is baseclass content');
+ };
+
+};
+
+
+package Childclass::UI;
+use base qw/Template::Declare/;
+use Template::Declare::Tags;
+private template 'private-content' => sub {
+ with( id => 'body' ), div {
+ outs('This is child class content');
+ };
+
+};
+
+
+
+
+package main;
+use Template::Declare::Tags;
+Template::Declare->init(roots => ['Baseclass::UI', 'Wifty::UI']);
+
+use Test::More qw/no_plan/;
+use HTML::Lint;
+
+{
+ local $Template::Declare::Tags::BUFFER;
+ my $simple = ( show('simple') );
+ like( $simple, qr'This is my content' );
+ ok_lint($simple);
+}
+
+
+Template::Declare->init(
+ roots => [ 'Baseclass::UI', 'Wifty::UI', 'Childclass::UI' ] );
+{
+ local $Template::Declare::Tags::BUFFER;
+ my $simple = ( show('simple') );
+ like( $simple, qr'This is child class content' );
+ ok_lint($simple);
+}
+
+{
+ local $Template::Declare::Tags::BUFFER;
+ my $simple = ( show('does_not_exist') );
+ unlike( $simple , qr'This is my content' );
+ ok_lint($simple);
+}
+{
+ local $Template::Declare::Tags::BUFFER;
+ my $simple = ( show('private-content') );
+ unlike( $simple , qr'This is my content', "Can't call private templates" );
+ ok_lint($simple);
+}
+
+sub ok_lint {
+ my $html = shift;
+
+ my $lint = HTML::Lint->new;
+
+ $lint->parse($html);
+ is( $lint->errors, 0, "Lint checked clean" );
+ foreach my $error ( $lint->errors ) {
+ diag( $error->as_string );
+ }
+
+}
+
+1;
More information about the Jifty-commit
mailing list