Fix everything but visit is broken
Nilson Santos Figueiredo JĂșnior [Thu, 5 Feb 2009 22:32:19 +0000 (22:32 +0000)]
lib/Catalyst/View/Component/SubInclude/ESI.pm
lib/Catalyst/View/Component/SubInclude/SubRequest.pm
lib/Catalyst/View/Component/SubInclude/Visit.pm
t/ESITest/lib/ESITest/Controller/Root.pm
t/ESITest/root/index.tt
t/ESITest/root/time_include.tt

index 6d763e1..e8f446f 100644 (file)
@@ -55,12 +55,14 @@ common interface for plugins.
 sub generate_subinclude {
     my ($class, $c, $path, @params) = @_;
 
+    my $args = ref $params[0] eq 'ARRAY' ? shift @params : [];
+    
     my $dispatcher = $c->dispatcher;
-    my ($action, $args) = $dispatcher->_invoke_as_path( $c, $path, @params );
+    my ($action) = $dispatcher->_invoke_as_path( $c, $path, $args );
 
-    my $uri = $c->uri_for( $action, $args );
+    my $uri = $c->uri_for( $action, $args, @params );
 
-    return '<!--esi <esi:include src="' . $uri->path . '" /> -->';
+    return '<!--esi <esi:include src="' . $uri->path_query . '" /> -->';
 }
 
 =head1 SEE ALSO
index 2e97236..982c0a6 100644 (file)
@@ -71,11 +71,13 @@ sub generate_subinclude {
 
     croak "subincludes through subrequests require Catalyst::Plugin::SubRequest"
         unless $c->can('sub_request');
+
+    my $args = ref $params[0] eq 'ARRAY' ? shift @params : [];
     
     my $dispatcher = $c->dispatcher;
-    my ($action, $args) = $dispatcher->_invoke_as_path( $c, $path, @params );
+    my ($action) = $dispatcher->_invoke_as_path( $c, $path, $args );
 
-    my $uri = $c->uri_for( $action, $args );
+    my $uri = $c->uri_for( $action, $args, @params );
 
     $c->sub_request( $uri->path, $stash, @params );
 }
index 1855589..b5fd93b 100644 (file)
@@ -55,9 +55,22 @@ sub generate_subinclude {
 
     croak "subincludes through visit() require Catalyst version 5.71000 or newer"
         unless $c->can('visit');
+    
+    $c->log->debug("generate subinclude: $path @params");
+
+    {
+        local $c->{stash} = {};
+        
+        local $c->request->{parameters} = 
+            ref $params[-1] eq 'HASH' ? pop @params : {};
+
+        local $c->response->{body};
+
+        $c->visit( $path, ( ref $params[0] eq 'ARRAY' ? shift @params : () ) );
+
+        return $c->response->{body};
+    }
 
-    $c->visit( $path, @params );
-    $c->res->{body};
 }
 
 =head1 SEE ALSO
index 41b0ee8..78b78c8 100644 (file)
@@ -16,7 +16,39 @@ sub base : Chained('/') PathPart('') CaptureArgs(0) {
 
 sub time_include : Chained('base') PathPart('time') Args(0) {
     my ( $self, $c ) = @_;
+    my $params = $c->req->params;
+
+    $c->stash->{current_time} = localtime();
+    
+    my $additional = '';
+    for my $key (keys %$params) {
+        $additional .= "| $key = $params->{$key} | "
+    }
+
+    $c->stash->{additional} = $additional;
+    
+}
+
+sub capture : Chained('base') PathPart('') CaptureArgs(1) {
+    my ( $self, $c, $arg ) = @_;
+    $c->log->debug("Capture: $arg");
+    $c->stash->{additional} = "Arg: $arg";
+}
+
+sub time_args : Chained('capture') PathPart('time') Args(0) {
+    my ( $self, $c ) = @_;
+    my $params = $c->req->params;
+
     $c->stash->{current_time} = localtime();
+
+    my $additional = $c->stash->{additional};
+    for my $key (keys %$params) {
+        $additional .= "| $key = $params->{$key} | "
+    }
+
+    $c->stash->{additional} = $additional;
+
+    $c->stash->{template} = 'time_include.tt';
 }
 
 sub end : ActionClass('RenderView') {}
index 73d6926..2bab3a9 100644 (file)
@@ -1,2 +1,3 @@
 ESI Test, will include /time_include<br/>
-[% subinclude('/time_include') %]
+[% subinclude('/time_include', { 'foo' => 'bar'} ) %]<br/>
+[% subinclude('/time_args', ['test'], { 'baz' => 'quux' }) %]<br/>
index 43120f9..26ad8d8 100644 (file)
@@ -1 +1 @@
-Current time is: [% current_time %]
\ No newline at end of file
+Current time is: [% current_time %] --> [% additional %]