[Jifty-commit] r2388 - in Template-Declare: lib/Template lib/Template/Declare t

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Sat Dec 16 17:22:06 EST 2006


Author: jesse
Date: Sat Dec 16 17:22:05 2006
New Revision: 2388

Added:
   Template-Declare/t/subtemplates.t
Modified:
   Template-Declare/   (props changed)
   Template-Declare/lib/Template/Declare.pm
   Template-Declare/lib/Template/Declare/Tags.pm

Log:
 r46211 at 66:  jesse | 2006-12-16 11:41:31 -0800
 * Unbroke support for subtemplates


Modified: Template-Declare/lib/Template/Declare.pm
==============================================================================
--- Template-Declare/lib/Template/Declare.pm	(original)
+++ Template-Declare/lib/Template/Declare.pm	Sat Dec 16 17:22:05 2006
@@ -34,50 +34,58 @@
     my $show_private = 0 || shift;
     $template_name =~ s{/}{::}g;
 
+    $pkg = ref($pkg)||$pkg;
+
+
     if ($template_name =~ /(.*)::(.*)/) {
         # Qualified name - Need to search for ISA chain
         my $class ="$pkg\::$1";
-
-        my $rv = ($class->_resolve_template($2, $show_private));
-        return ($rv) if $rv;
-
+        my $rv = (Template::Declare::_resolve_template($class,$2, $show_private));
+        if( $rv) {
+        return ($class, $rv) 
+        }
         no strict 'refs';
         foreach my $parent (@{"$pkg\::ISA"}) {
             $parent->can('has_template') or next;
-            ($rv) = $parent->has_template($template_name, $show_private);
-            return ( $rv) if $rv;
+            my $template_pkg;
+            ($template_pkg, $rv) = $parent->has_template($template_name, $show_private);
+            return ( $template_pkg,$rv) if $rv;
         }
     }
     else {
         # Unqualified name
-        return ($pkg->_resolve_template($template_name, $show_private));
+        return ($pkg,Template::Declare::_resolve_template($pkg,$template_name, $show_private));
     }
     return undef;
 }
 
 
-sub _resolve_template { 
-    my $self = shift;
+sub _resolve_template {
+    my $self          = shift;
     my $template_name = shift;
-    my $show_private = shift;
+    my $show_private  = shift;
 
-   
 
-    my $method =  $self->_template_name_to_sub( $template_name) ;
-    my $private_method; 
-    
-    if ($self->can($method)) {
+    my $method = _template_name_to_sub($template_name);
+    my $private_method;
+
+    if ( $self->can($method) ) {
         return $method;
     }
-   
-    elsif    ($show_private &&  ($private_method = $self->_template_name_to_private_sub($template_name)) && $self->can($private_method))
-     {  return $private_method;
- }
-        
+
+    elsif (
+        $show_private
+        && ( $private_method
+            = _template_name_to_private_sub($template_name) )
+        && $self->can($private_method)
+        )
+    {
+        return $private_method;
+    }
+
 }
 
 sub _template_name_to_sub {
-    my $self = shift;
     my $template_name =shift;
         $template_name =~ s/-/_/g;
     return "_jifty_template_".$template_name;
@@ -85,7 +93,6 @@
 }
 
 sub _template_name_to_private_sub {
-    my $self = shift;
     my $template_name =shift;
         $template_name =~ s/-/_/g;
     return "_jifty_private_template_".$template_name;

Modified: Template-Declare/lib/Template/Declare/Tags.pm
==============================================================================
--- Template-Declare/lib/Template/Declare/Tags.pm	(original)
+++ Template-Declare/lib/Template/Declare/Tags.pm	Sat Dec 16 17:22:05 2006
@@ -49,9 +49,11 @@
     my $base_name;
     my $template_class;
     if ($template_name =~ m{(.*/)?(.*)}) {
-        $template_class = caller() . $1;
-        $template_class =~ s{/}{::}g;
+        my $subpkg = $1;
         $base_name = $2;
+        $template_class = join('/',(caller(0))[0], $subpkg);
+        $template_class =~ s{/+}{::}g;
+        $template_class =~ s{::$}{}g;
     }
     
     
@@ -63,7 +65,7 @@
         return ($template_class, $base_name, $codesub);
     } 
     else {
-    *{ $template_class .'::' .  $template_class->_template_name_to_sub($base_name); } = $codesub;
+    *{ $template_class .'::' .  Template::Declare::_template_name_to_sub($base_name); } = $codesub;
     }
 
 }
@@ -74,7 +76,7 @@
     my $code = shift;
     {
         no strict 'refs'; 
-        *{ $class .'::' .  $class->_template_name_to_private_sub($subname); } = $code;
+        *{ $class .'::' .  Template::Declare::_template_name_to_private_sub($subname); } = $code;
     }
 }
 
@@ -259,7 +261,8 @@
 
     my $buf      = '';
 
-   
+    # $pkg is the package the template is actually in.
+    my $pkg = $self;
     my $INSIDE_TEMPLATE = 0;
     my $caller = caller();
     if ($caller->isa('Template::Declare')) { $INSIDE_TEMPLATE = 1; }
@@ -272,7 +275,7 @@
         }
         else {
             # if we're inside a template, we should show private templates
-           ( $callable)  = $self->has_template($template, $INSIDE_TEMPLATE);
+           ($pkg, $callable)  = $self->has_template($template, $INSIDE_TEMPLATE);
         }
 
         # may want to just use the return value of has_template eventually
@@ -282,11 +285,11 @@
             and 
 
             # XXX TODO: die if there's no such template?
-            $self->can($callable)) {
+            $pkg->can($callable)) {
 
             no strict 'refs';
-            $self->$callable(  @_ );
-        }
+            $pkg->$callable(  @_ );
+        } 
 
         $buf = $BUFFER;
     }

Added: Template-Declare/t/subtemplates.t
==============================================================================
--- (empty file)
+++ Template-Declare/t/subtemplates.t	Sat Dec 16 17:22:05 2006
@@ -0,0 +1,64 @@
+use warnings;
+use strict;
+
+
+package Wifty::UI;
+use base qw/Template::Declare/;
+use Template::Declare::Tags;
+use Test::More;
+
+template simple => sub {
+
+html { 
+    head { };
+        body {
+            show 'my/content'
+        }
+}
+
+};
+
+template 'my/content' => sub {
+        div { attr { id => 'body' }
+            outs('This is my content')
+        }
+
+};
+
+package Template::Declare::Tags;
+
+use Test::More qw/no_plan/;
+use HTML::Lint;
+
+our $self;
+local $self = {};
+bless $self, 'Wifty::UI';
+{
+local $Template::Declare::Tags::BUFFER;
+my $simple =(show('my/content'));
+ok($simple =~ 'This is my content');
+#diag ($simple);
+ok_lint($simple);
+}
+{
+local $Template::Declare::Tags::BUFFER;
+my $simple =(show('simple'));
+ok($simple =~ 'This is my content');
+#diag ($simple);
+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