X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FView%2FComponent%2FSubInclude%2FSubRequest.pm;h=4f7cc72ebf6baeacccb609ece2f1e9992e7b1225;hb=bff1b853c17ad52e468fe8984ab3b18964463c7f;hp=5c8cf7a09b8c56b63618989ae99758d0f1967756;hpb=4e3277560cc20740e2cdb58f4f9cf8eda74c9d73;p=catagits%2FCatalyst-View-Component-SubInclude.git diff --git a/lib/Catalyst/View/Component/SubInclude/SubRequest.pm b/lib/Catalyst/View/Component/SubInclude/SubRequest.pm index 5c8cf7a..4f7cc72 100644 --- a/lib/Catalyst/View/Component/SubInclude/SubRequest.pm +++ b/lib/Catalyst/View/Component/SubInclude/SubRequest.pm @@ -1,6 +1,8 @@ package Catalyst::View::Component::SubInclude::SubRequest; -use warnings; -use strict; +use Moose; +use Carp qw/croak/; +use MooseX::Types::Moose qw/ Bool /; +use namespace::clean -except => 'meta'; =head1 NAME @@ -8,11 +10,12 @@ Catalyst::View::Component::SubInclude::SubRequest - Sub-requests plugin for C::V =head1 VERSION -Version 0.01 +Version 0.07_03 =cut -our $VERSION = '0.01'; +our $VERSION = '0.07_03'; +$VERSION = eval $VERSION; =head1 SYNOPSIS @@ -48,28 +51,46 @@ to render the subinclude contents. It requires L. -=head1 STASH FUNCTION +=head1 CLASS METHODS -=head2 C +=head2 C -This will translate to the following sub-request call: +This will make a sub-request call to the action specified by C<$path>. Note that +C<$path> should be the private action path - translation to the public path is +handled internally. - $c->sub_request( $path, {}, @args ); +So, after path translation, the call will be (roughly) equivalent to: + + $c->sub_request( $translated_path, {}, @args ); Notice that the stash will always be empty. This behavior could be configurable in the future through an additional switch - for now, this behavior guarantees a -common interface for plugins. +common interface for all plugins. =cut +has keep_stash => ( + isa => Bool, + is => 'ro', + default => 0, +); + sub generate_subinclude { - my ($class, $c, $path, @params) = @_; - my $stash = {}; + my ($self, $c, $path, @params) = @_; + my $stash = $self->keep_stash ? { %{ $c->stash } } : {}; croak "subincludes through subrequests require Catalyst::Plugin::SubRequest" unless $c->can('sub_request'); - $c->sub_request( $path, $stash, @params ); + my $query = ref $params[-1] eq 'HASH' ? pop @params : {}; + + my $action = blessed($path) + ? $path + : $c->dispatcher->get_action_by_path($path); + + my $uri = $c->uri_for( $action, @params ); + + $c->sub_request( $uri->path, $stash, $query ); } =head1 SEE ALSO @@ -96,4 +117,5 @@ under the same terms as Perl itself. =cut +__PACKAGE__->meta->make_immutable; 1;