[Jifty-commit] r3074 - in Template-Declare: lib/Template/Declare t
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Sat Mar 31 21:20:46 EDT 2007
Author: jesse
Date: Sat Mar 31 21:20:45 2007
New Revision: 3074
Modified:
Template-Declare/ (props changed)
Template-Declare/lib/Template/Declare/Tags.pm
Template-Declare/t/closures.t
Log:
r54393 at pinglin: jesse | 2007-03-31 18:20:31 -0700
* more work on closures
Modified: Template-Declare/lib/Template/Declare/Tags.pm
==============================================================================
--- Template-Declare/lib/Template/Declare/Tags.pm (original)
+++ Template-Declare/lib/Template/Declare/Tags.pm Sat Mar 31 21:20:45 2007
@@ -130,24 +130,18 @@
Template::Declare->new_buffer_frame;
foreach my $item ( grep {defined} @phrases ) {
-
Template::Declare->new_buffer_frame;
- my $returned = ref($item) eq 'CODE'
- ? $item->()
- : ( $raw ? $item : _escape_utf8($item) ) ||'';
- my $content = Template::Declare->buffer->data ||'';
+ my $returned = ref($item) eq 'Template::Declare::Tag' ? $item->()
+ : ( $raw ? $item : _escape_utf8($item) ) || '';
+ $returned .= Template::Declare->buffer->data || '';
Template::Declare->end_buffer_frame;
- Template::Declare->buffer->append( $content . $returned );
+ Template::Declare->buffer->append( $returned );
}
- $buf = Template::Declare->buffer->data ||'';
+ $buf = Template::Declare->buffer->data || '';
Template::Declare->end_buffer_frame;
- if ( defined wantarray and not wantarray ) {
- return $buf;
- } else {
- Template::Declare->buffer->append($buf);
-
- }
+ if ( defined wantarray and not wantarray ) { return $buf; }
+ else { Template::Declare->buffer->append($buf); }
return '';
}
@@ -199,11 +193,13 @@
# Scalar context - return a coderef that represents ourselves.
my @__ = @_;
my $_self = $self;
- sub {
+ my $sub = sub {
local $self = $_self;
local *__ANON__ = $tag;
_tag(@__);
};
+ bless $sub, 'Template::Declare::Tag';
+ return $sub;
} else {
_tag(@_);
}
@@ -382,8 +378,7 @@
Template::Declare->buffer->append( $buf);
-
- return $more_code ? $more_code->() : '';
+ return (ref($more_code) && $more_code->isa('CODE')) ? $more_code->() : '';
}
=head2 show [$template_name or $template_coderef]
@@ -414,7 +409,7 @@
else { Template::Declare->new_buffer_frame }
my $callable =
- ref($template) eq 'CODE'
+ (ref($template) && $template->isa('Template::Declare::Tag'))
? $template
: Template::Declare->has_template( $template, $INSIDE_TEMPLATE );
@@ -502,4 +497,26 @@
=cut
+
+package Template::Declare::Tag;
+
+use overload '""' => \&stringify;
+
+sub stringify {
+ my $self = shift;
+
+ if (defined wantarray) {
+ Template::Declare->new_buffer_frame;
+ my $returned =$self->();
+ my $content = Template::Declare->buffer->data();
+ Template::Declare->end_buffer_frame;
+ return ($content . $returned);
+ } else {
+
+ return $self->();
+ }
+}
+
+
+
1;
Modified: Template-Declare/t/closures.t
==============================================================================
--- Template-Declare/t/closures.t (original)
+++ Template-Declare/t/closures.t Sat Mar 31 21:20:45 2007
@@ -5,7 +5,7 @@
package TestApp::UI;
use base qw/Template::Declare/;
use Template::Declare::Tags;
-use Test::More tests => 16;
+use Test::More tests => 18;
template simple => sub {
@@ -52,7 +52,10 @@
i { outs("My " , $item)};
};
+template closure_6 => sub {
+ outs('I decided to do ', i{'Something else'}, ' rather than ');
+};
package Template::Declare::Tags;
require "t/utils.pl";
@@ -90,21 +93,28 @@
for (qw(closure_1 closure_2 closure_3)) {
Template::Declare->buffer->clear;
my $simple = Template::Declare->show($_);
+diag ($simple);
ok($simple =~ /<i>\s*<b>\s*Bolded\s*<\/b>\s*<\/i>/ms);
-#diag ($simple);
ok_lint($simple);
}
-TODO: {
-local $TODO = ' string interpolation is busted';
for (qw(closure_4 closure_5)) {
Template::Declare->buffer->clear;
my $simple = Template::Declare->show($_);
ok($simple =~ /<i>My\s*<b>Bolded\s*<\/b>\s*<\/i>/ms);
diag ($simple);
ok_lint(Template::Declare->buffer->data());
+
}
-};
+{
+Template::Declare->buffer->clear;
+my $simple = Template::Declare->show('closure_6');
+ok($simple =~ /I decided to do\s*<i>\s*Something else\s*<\/i>/);
+diag ($simple);
+ok_lint(Template::Declare->buffer->data());
+}
+
+
1;
More information about the Jifty-commit
mailing list