Version 0.17
[catagits/Catalyst-Plugin-SubRequest.git] / lib / Catalyst / Plugin / SubRequest.pm
index 0cfd8b3..d0767f4 100644 (file)
@@ -1,9 +1,10 @@
 package Catalyst::Plugin::SubRequest;
 
 use strict;
+use warnings;
 use Time::HiRes qw/tv_interval/;
 
-our $VERSION = '0.14';
+our $VERSION = '0.17';
 
 =head1 NAME
 
@@ -13,16 +14,29 @@ Catalyst::Plugin::SubRequest - Make subrequests to actions in Catalyst
 
     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
 
@@ -30,19 +44,45 @@ dispatcher, so it will work like an external url call.
 
 =item subreq [path as string or hash ref], [stash as hash ref], [parameters as hash ref]
 
+=item subrequest
+
 =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 subrequest_response
+
+=item sub_request_response
+
+Like C<sub_request()>, but returns a full L<Catalyst::Response> object.
 
 =back
 
 =cut
 
 *subreq = \&sub_request;
+*subrequest = \&sub_request;
+*subreq_res = \&sub_request_response;
+*subrequest_response = \&sub_request_response;
 
 sub sub_request {
+    return shift->sub_request_response( @_ )->body ;
+}
+
+sub sub_request_response {
     my ( $c, $path, $stash, $params ) = @_;
 
     $path =~ s#^/##;
@@ -58,9 +98,11 @@ sub sub_request {
 
     if (ref $path eq 'HASH') {
         @request_mods{keys %$path} = values %$path;
+        $path = $path->{path};
     } else {
         $request_mods{path} = $path;
     }
+    $request_mods{_body} = delete $request_mods{body};
 
     my $fake_engine = bless(
         {
@@ -91,25 +133,27 @@ sub sub_request {
 
     $c->stats->profile( end => 'subrequest: /' . $path ) if ($c->debug);
 
-    return $inner_ctx->response->body;
+    return $inner_ctx->response;
 }
 
 =head1 SEE ALSO
 
 L<Catalyst>.
 
-=head1 AUTHOR
+=head1 AUTHORS
 
 Marcus Ramberg, C<mramberg@cpan.org>
 
+Tomas Doran (t0m) C<< bobtfish@bobtfish.net >>
+
 =head1 THANK YOU
 
 SRI, for writing the awesome Catalyst framework
 
 =head1 COPYRIGHT
 
-Copyright (c) 2005 - 2008
-the Catalyst::Plugin::SubRequest L</AUTHOR>
+Copyright (c) 2005 - 2011
+the Catalyst::Plugin::SubRequest L</AUTHORS>
 as listed above.
 
 =head1 LICENSE