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

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Mon May 7 22:05:52 EDT 2007


Author: jesse
Date: Mon May  7 22:05:51 2007
New Revision: 3214

Modified:
   Template-Declare/   (props changed)
   Template-Declare/lib/Template/Declare.pm
   Template-Declare/t/aliasing.t

Log:
 r56761 at pinglin:  jesse | 2007-05-07 22:05:40 -0400
 * First pass at package variables for templates


Modified: Template-Declare/lib/Template/Declare.pm
==============================================================================
--- Template-Declare/lib/Template/Declare.pm	(original)
+++ Template-Declare/lib/Template/Declare.pm	Mon May  7 22:05:51 2007
@@ -27,6 +27,8 @@
 
 __PACKAGE__->new_buffer_frame();
 
+use vars qw/$TEMPLATE_VARS/;
+
 
 =head1 NAME
 
@@ -216,10 +218,11 @@
     my $alias_into      = caller(0);
     my $mixin = shift;
     my $prepend_path     = shift;
+    my $package_vars = shift;
 
     my $alias_key = $mixin . " ".$prepend_path;
     push @{$alias_into->aliases()}, $alias_key;
-    $alias_into->alias_metadata()->{$alias_key} =  { class=> $mixin, path => $prepend_path };
+    $alias_into->alias_metadata()->{$alias_key} =  { class=> $mixin, path => $prepend_path, package_vars => $package_vars };
 
 }
 
@@ -351,13 +354,20 @@
             my $alias_info = $package->alias_metadata()->{$alias_key};
             my $alias_prefix = $alias_info->{path};
             my $alias_class = $alias_info->{class};
+            my $package_vars = $alias_info->{package_vars};
+
 
             $template_name = "/$template_name";
             if ( $template_name =~ m{$alias_prefix/(.*)$} ) {
                 my $dispatch_to_template = $1;
                 if (my $coderef = $alias_class->has_template( $dispatch_to_template, $show_private)) {
                     # We're going to force $self to the aliased class
-                    return sub {  &$coderef($alias_class) };
+                    return sub {  
+                        no strict 'refs'; 
+            
+                        local $TEMPLATE_VARS->{$alias_class} = $package_vars;
+                        &$coderef($alias_class);
+                    };
                 }
             }
         }
@@ -438,7 +448,12 @@
 }
 
 
+sub package_variable {
+    my $self = shift;
+    my $var = shift;
+    return $TEMPLATE_VARS->{$self}->{$var};
 
+}
 
 =head1 BUGS
 

Modified: Template-Declare/t/aliasing.t
==============================================================================
--- Template-Declare/t/aliasing.t	(original)
+++ Template-Declare/t/aliasing.t	Mon May  7 22:05:51 2007
@@ -8,6 +8,7 @@
 template 'aliased' => sub {
     my $self = shift;
     div { outs( 'This is aliased from ' . $self ) };
+    div { 'Variable ', $self->package_variable('VARIABLE') };
 };
 
 package Wifty::UI::aliased_subclass_pkg;
@@ -35,14 +36,15 @@
 };
 
 
-alias Wifty::UI::aliased_pkg under '/aliased_pkg';
+alias Wifty::UI::aliased_pkg under '/aliased_pkg', { VARIABLE => 'SET' } ;
+alias Wifty::UI::aliased_pkg under '/aliased_pkg2';
 alias Wifty::UI::aliased_subclass_pkg under '/aliased_subclass_pkg';
 
 package main;
 use Template::Declare::Tags;
 Template::Declare->init( roots => ['Wifty::UI'] );
 
-use Test::More tests => 11;
+use Test::More tests => 16;
 require "t/utils.pl";
 
 ok( Wifty::UI::aliased_pkg->has_template('aliased') );
@@ -57,11 +59,22 @@
 {
     my $simple = ( show('aliased_pkg/aliased') );
     like( $simple, qr'This is aliased' );
+    like( $simple, qr'Variable SET' , "The variable was set");
     like( $simple, qr'Wifty::UI::aliased_pkg',
         '$self is correct in template block' );
     ok_lint($simple);
 }
 
+{
+    my $simple = ( show('aliased_pkg2/aliased') );
+    like( $simple, qr'This is aliased' );
+    unlike( $simple, qr'Varialble SET' , "The variable was  not set on second aliasing");
+    like( $simple, qr'Wifty::UI::aliased_pkg',
+        '$self is correct in template block' );
+    ok_lint($simple);
+}
+
+
 
 {
     my $simple = ( show('aliased_subclass_pkg/aliased') );


More information about the Jifty-commit mailing list