Fix some issues with Args/Captures in the SubRequest and Visit plugins and add more...
Nilson Santos Figueiredo JĂșnior [Mon, 27 Jul 2009 23:33:19 +0000 (23:33 +0000)]
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

index 4b997c0..3a5658a 100644 (file)
@@ -76,14 +76,15 @@ 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 $args  = ref $params[0]  eq 'ARRAY' ? shift @params : [];
+    my $query = ref $params[-1] eq 'HASH'  ?   pop @params : {};
     
     my $dispatcher = $c->dispatcher;
     my ($action) = $dispatcher->_invoke_as_path( $c, $path, $args );
 
     my $uri = $c->uri_for( $action, $args, @params );
 
-    $c->sub_request( $uri->path, $stash, @params );
+    $c->sub_request( $uri->path, $stash, $query );
 }
 
 =head1 SEE ALSO
index 52ed67d..2d25883 100644 (file)
@@ -63,8 +63,6 @@ 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} = {};
@@ -74,7 +72,8 @@ sub generate_subinclude {
 
         local $c->response->{body};
 
-        $c->visit( $path, ( ref $params[0] eq 'ARRAY' ? shift @params : () ) );
+        my $captures = ref $params[0] eq 'ARRAY' ? shift @params : [];
+        $c->visit( $path, \@params, $captures );
 
         return $c->response->{body};
     }
index 78b78c8..a19c771 100644 (file)
@@ -32,7 +32,7 @@ sub time_include : Chained('base') PathPart('time') Args(0) {
 sub capture : Chained('base') PathPart('') CaptureArgs(1) {
     my ( $self, $c, $arg ) = @_;
     $c->log->debug("Capture: $arg");
-    $c->stash->{additional} = "Arg: $arg";
+    $c->stash->{additional} = "Capture Arg: $arg";
 }
 
 sub time_args : Chained('capture') PathPart('time') Args(0) {
@@ -51,6 +51,42 @@ sub time_args : Chained('capture') PathPart('time') Args(0) {
     $c->stash->{template} = 'time_include.tt';
 }
 
+sub time_args_with_args : Chained('capture') PathPart('time') Args(1) {
+    my ( $self, $c, $arg ) = @_;
+    my $params = $c->req->params;
+
+    $c->stash->{current_time} = localtime();
+
+    my $additional = $c->stash->{additional};
+    for my $key (keys %$params) {
+        $additional .= " | $key = $params->{$key} | "
+    }
+
+    $additional .= " Action Arg: $arg ";
+
+    $c->stash->{additional} = $additional;
+
+    $c->stash->{template} = 'time_include.tt';
+}
+
+sub time_args_without_capture : Chained('base') PathPart('time') Args(1) {
+    my ( $self, $c, $arg ) = @_;
+    my $params = $c->req->params;
+
+    $c->stash->{current_time} = localtime();
+
+    my $additional = '';
+    for my $key (keys %$params) {
+        $additional .= " | $key = $params->{$key} | "
+    }
+
+    $additional .= " Action Arg: $arg ";
+
+    $c->stash->{additional} = $additional;
+
+    $c->stash->{template} = 'time_include.tt';
+}
+
 sub end : ActionClass('RenderView') {}
 
 1;
index dd6e59f..913c888 100644 (file)
@@ -9,4 +9,35 @@ Test subinclude using specific plugins:<br/>
 [% subinclude_using('ESI', '/time_include', { 'plugin' => 'ESI'} ) %]<br/>
 
 <br/><br/>
-[% subinclude_using('SubRequest', '/time_args', ['test'], { 'baz' => 'quux' }) %]<br/>
+
+
+Test CaptureArgs and Args interaction (SubRequest):<br/><br/>
+
+[% subinclude_using('SubRequest', '/time_args_with_args', ['capture_argtest'], 'regular_arg', { query_arg => 'val' } ) %]<br/>
+(using: [% c.uri_for( c.controller.action_for('time_args_with_args'), ['capture_argtest'], 'regular_arg', { query_arg => 'val' } ) %])<br/>
+<br/>
+
+[% subinclude_using('SubRequest', '/time_args_without_capture', 'regular_arg', { query_arg => 'val' }) %]<br/>
+(using: [% c.uri_for( c.controller.action_for('time_args_without_capture'), 'regular_arg', { query_arg => 'val' } ) %])<br/>
+
+<br/><br/>
+
+Test CaptureArgs and Args interaction (Visit):<br/><br/>
+
+[% subinclude_using('Visit', '/time_args_with_args', ['capture_argtest'], 'regular_arg', { query_arg => 'val' } ) %]<br/>
+(using: [% c.uri_for( c.controller.action_for('time_args_with_args'), ['capture_argtest'], 'regular_arg', { query_arg => 'val' } ) %])<br/>
+<br/>
+
+[% subinclude_using('Visit', '/time_args_without_capture', 'regular_arg', { query_arg => 'val' }) %]<br/>
+(using: [% c.uri_for( c.controller.action_for('time_args_without_capture'), 'regular_arg', { query_arg => 'val' } ) %])<br/>
+
+<br/><br/>
+
+Test CaptureArgs and Args interaction (ESI):<br/><br/>
+
+[% subinclude_using('ESI', '/time_args_with_args', ['capture_argtest'], 'regular_arg', { query_arg => 'val' } ) %]<br/>
+(using: [% c.uri_for( c.controller.action_for('time_args_with_args'), ['capture_argtest'], 'regular_arg', { query_arg => 'val' } ) %])<br/>
+<br/>
+
+[% subinclude_using('ESI', '/time_args_without_capture', 'regular_arg', { query_arg => 'val' }) %]<br/>
+(using: [% c.uri_for( c.controller.action_for('time_args_without_capture'), 'regular_arg', { query_arg => 'val' } ) %])<br/>