[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