X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-View-Component-SubInclude.git;a=blobdiff_plain;f=lib%2FCatalyst%2FView%2FComponent%2FSubInclude%2FSubRequest.pm;h=18260dc25ab14727f19bd84a3faec33693119c0a;hp=75b5d6b4c4470ae893c0def8f80c54f0f7cf9e72;hb=f97c716560e114d118695339a200fe5a7e09e9e5;hpb=9399de67c73e690611087f7aa359537a7bef4b46 diff --git a/lib/Catalyst/View/Component/SubInclude/SubRequest.pm b/lib/Catalyst/View/Component/SubInclude/SubRequest.pm index 75b5d6b..18260dc 100644 --- a/lib/Catalyst/View/Component/SubInclude/SubRequest.pm +++ b/lib/Catalyst/View/Component/SubInclude/SubRequest.pm @@ -1,9 +1,8 @@ package Catalyst::View::Component::SubInclude::SubRequest; -use warnings; -use strict; - +use Moose; use Carp qw/croak/; -use namespace::clean qw/croak/; +use MooseX::Types::Moose qw/ Bool /; +use namespace::clean -except => 'meta'; =head1 NAME @@ -69,20 +68,26 @@ 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'); - my $args = ref $params[0] eq 'ARRAY' ? shift @params : []; - my $query = ref $params[-1] eq 'HASH' ? pop @params : {}; + my $query = ref $params[-1] eq 'HASH' ? pop @params : {}; - my $dispatcher = $c->dispatcher; - my ($action) = $dispatcher->_invoke_as_path( $c, $path, $args ); + my $action = blessed($path) + ? $path + : $c->dispatcher->get_action_by_path($path); - my $uri = $c->uri_for( $action, $args, @params ); + my $uri = $c->uri_for( $action, @params ); $c->sub_request( $uri->path, $stash, $query ); } @@ -111,4 +116,5 @@ under the same terms as Perl itself. =cut +__PACKAGE__->meta->make_immutable; 1;