[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