X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FActionChain.pm;h=ed2fb51a8cedc1689724b8472eb67d6cc103a8a0;hb=65905d68f5081a6eaf392e6ef3a84b63e2a04701;hp=d9fb623a238e048181526b933eee7643e3abce78;hpb=4090e3bb3fea1a73ac369250e31584d61428b808;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/ActionChain.pm b/lib/Catalyst/ActionChain.pm index d9fb623..ed2fb51 100644 --- a/lib/Catalyst/ActionChain.pm +++ b/lib/Catalyst/ActionChain.pm @@ -4,7 +4,6 @@ use Moose; extends qw(Catalyst::Action); has chain => (is => 'rw'); - no Moose; =head1 NAME @@ -30,11 +29,14 @@ sub dispatch { my $last = pop(@chain); foreach my $action ( @chain ) { my @args; - if (my $cap = $action->attributes->{CaptureArgs}) { - @args = splice(@captures, 0, $cap->[0]); + if (my $cap = $action->number_of_captures) { + @args = splice(@captures, 0, $cap); } local $c->request->{arguments} = \@args; $action->dispatch( $c ); + + # break the chain if exception occurs in the middle of chain + return if (@{$c->error} && $c->config->{abort_chain_on_error_fix}); } $last->dispatch( $c ); } @@ -45,6 +47,15 @@ sub from_chain { return $self->new({ %$final, chain => $actions }); } +sub number_of_captures { + my ( $self ) = @_; + my $chain = $self->chain; + my $captures = 0; + + $captures += $_->number_of_captures for @$chain; + return $captures; +} + __PACKAGE__->meta->make_immutable; 1; @@ -67,17 +78,21 @@ actions in order. Takes a list of Catalyst::Action objects and constructs and returns a Catalyst::ActionChain object representing a chain of these actions +=head2 number_of_captures + +Returns the total number of captures for the entire chain of actions. + =head2 meta Provided by Moose -=head1 AUTHOR +=head1 AUTHORS -Matt S. Trout +Catalyst Contributors, see Catalyst.pm =head1 COPYRIGHT -This program is free software, you can redistribute it and/or modify it under +This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. =cut