[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