[Catalyst-commits] r12764 - in trunk/Catalyst-Plugin-SubRequest: . lib/Catalyst/Plugin t t/lib/TestApp/Controller

t0m at dev.catalyst.perl.org t0m at dev.catalyst.perl.org
Thu Jan 28 21:08:15 GMT 2010


Author: t0m
Date: 2010-01-28 21:08:15 +0000 (Thu, 28 Jan 2010)
New Revision: 12764

Modified:
   trunk/Catalyst-Plugin-SubRequest/Changes
   trunk/Catalyst-Plugin-SubRequest/lib/Catalyst/Plugin/SubRequest.pm
   trunk/Catalyst-Plugin-SubRequest/t/02subreq.t
   trunk/Catalyst-Plugin-SubRequest/t/lib/TestApp/Controller/Root.pm
Log:
Apply patch to be able to get the entire request, from RT#39486

Modified: trunk/Catalyst-Plugin-SubRequest/Changes
===================================================================
--- trunk/Catalyst-Plugin-SubRequest/Changes	2010-01-28 20:32:44 UTC (rev 12763)
+++ trunk/Catalyst-Plugin-SubRequest/Changes	2010-01-28 21:08:15 UTC (rev 12764)
@@ -1,5 +1,9 @@
 Revision history for Perl extension Catalyst::Plugin::SubRequest
 
+0.16  2010-01-28 21:09:04 GMT
+        - Add subreq_res to get the full Catalyst::Response back
+          from the sub request. RT#39486
+
 0.15  2009-11-23 22:47:32 GMT
         - Be compatible with Catalyst 5.80014 by not writing to the
           request body directly.

Modified: trunk/Catalyst-Plugin-SubRequest/lib/Catalyst/Plugin/SubRequest.pm
===================================================================
--- trunk/Catalyst-Plugin-SubRequest/lib/Catalyst/Plugin/SubRequest.pm	2010-01-28 20:32:44 UTC (rev 12763)
+++ trunk/Catalyst-Plugin-SubRequest/lib/Catalyst/Plugin/SubRequest.pm	2010-01-28 21:08:15 UTC (rev 12764)
@@ -4,7 +4,7 @@
 use warnings;
 use Time::HiRes qw/tv_interval/;
 
-our $VERSION = '0.15';
+our $VERSION = '0.16';
 
 =head1 NAME
 
@@ -14,16 +14,29 @@
 
     use Catalyst 'SubRequest';
 
-    $c->subreq('/test/foo/bar', { template => 'magic.tt' });
+    my $res_body = $c->subreq('/test/foo/bar', { template => 'magic.tt' });
 
-    $c->subreq(        {       path            => '/test/foo/bar',
-                       body            => $body        },
-               {       template        => 'magic.tt'           });
+    my $res_body = $c->subreq( {
+       path            => '/test/foo/bar',
+       body            => $body
+    }, {
+       template        => 'magic.tt'
+    });
 
+    # Get the full response object
+    my $res = $c->subreq_res('/test/foo/bar', {
+        template => 'mailz.tt'
+    }, {
+        param1   => 23
+    });
+    $c->log->warn( $res->content_type );
+
 =head1 DESCRIPTION
 
 Make subrequests to actions in Catalyst. Uses the  catalyst
 dispatcher, so it will work like an external url call.
+Methods are provided both to get the body of the response and the full
+response (L<Catalyst::Response>) object.
 
 =head1 METHODS
 
@@ -34,16 +47,36 @@
 =item sub_request
 
 Takes a full path to a path you'd like to dispatch to.
-If the path is passed as a hash ref then it can include body, action, match and path.
-Any additional parameters are put into the stash.
 
+If the path is passed as a hash ref then it can include body, action,
+match and path.
+
+An optional second argument as hashref can contain data to put into the
+stash of the subrequest.
+
+An optional third argument as hashref can contain data to pass as
+parameters to the subrequest.
+
+Returns the body of the response.
+
+=item subreq_res [path as string or hash ref], [stash as hash ref], [parameters as hash ref]
+
+=item sub_request_response
+
+Like C<sub_request()>, but returns a full L<Catalyst::Response> object.
+
 =back
 
 =cut
 
 *subreq = \&sub_request;
+*subreq_res = \&sub_request_response;
 
 sub sub_request {
+    return shift->sub_request_response( @_ )->body ;
+}
+
+sub sub_request_response {
     my ( $c, $path, $stash, $params ) = @_;
 
     $path =~ s#^/##;
@@ -93,7 +126,7 @@
 
     $c->stats->profile( end => 'subrequest: /' . $path ) if ($c->debug);
 
-    return $inner_ctx->response->body;
+    return $inner_ctx->response;
 }
 
 =head1 SEE ALSO

Modified: trunk/Catalyst-Plugin-SubRequest/t/02subreq.t
===================================================================
--- trunk/Catalyst-Plugin-SubRequest/t/02subreq.t	2010-01-28 20:32:44 UTC (rev 12763)
+++ trunk/Catalyst-Plugin-SubRequest/t/02subreq.t	2010-01-28 21:08:15 UTC (rev 12764)
@@ -1,6 +1,6 @@
 package main;
 
-use Test::More tests => 9;
+use Test::More tests => 12;
 use lib 't/lib';
 use Catalyst::Test 'TestApp';
 use File::stat;
@@ -25,3 +25,10 @@
     is( $response->code, 200, 'OK status code' );
     is( $response->content, '1abc3', 'Normal request content' );
 }
+
+{
+    ok( my $response = request('/subtest_full_response'),    'Sub Reuqest returning full response object'  );
+    is( $response->code, 200,                 'OK status code'  );
+    is( $response->content, '1text/csv3',    'Normal request content', );
+}
+

Modified: trunk/Catalyst-Plugin-SubRequest/t/lib/TestApp/Controller/Root.pm
===================================================================
--- trunk/Catalyst-Plugin-SubRequest/t/lib/TestApp/Controller/Root.pm	2010-01-28 20:32:44 UTC (rev 12763)
+++ trunk/Catalyst-Plugin-SubRequest/t/lib/TestApp/Controller/Root.pm	2010-01-28 21:08:15 UTC (rev 12764)
@@ -29,6 +29,18 @@
     $c->res->body($c->res->body().$after);
 }
 
+sub subtest_full_response : Global {
+    my ( $self, $c ) = @_;
+    my $subreq_res = $c->subreq_res('/typesetter');
+    $c->res->body( $c->res->body() . $subreq_res->content_type );
+}
+
+sub typesetter : Global {
+    my ( $self, $c, $arg ) = @_;
+    $c->res->content_type( 'text/csv' );
+    $c->res->body($c->res->body());
+}
+
 sub end : Private {
     my ( $self, $c ) = @_;
     $c->res->body($c->res->body().'3');




More information about the Catalyst-commits mailing list