X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FActionChain.pm;h=5e222c23db665c4db4d27a0f0f3bb0f4dfe5b4a2;hb=2a1c08c07e5a7fe716d5bfe897e5b27fc179300a;hp=496000bc2d0bc7791ee6ebaaae21f3008a48560a;hpb=0cff119a540a3c8961750bd499f4c470771ac342;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/ActionChain.pm b/lib/Catalyst/ActionChain.pm index 496000b..5e222c2 100644 --- a/lib/Catalyst/ActionChain.pm +++ b/lib/Catalyst/ActionChain.pm @@ -34,6 +34,14 @@ sub dispatch { } local $c->request->{arguments} = \@args; $action->dispatch( $c ); + + # break the chain if exception occurs in the middle of chain. We + # check the global config flag 'abort_chain_on_error_fix', but this + # is now considered true by default, so unless someone explicitly sets + # it to false we default it to true (if its not defined). + my $abort = defined($c->config->{abort_chain_on_error_fix}) ? + $c->config->{abort_chain_on_error_fix} : 1; + return if ($c->has_errors && $abort); } $last->dispatch( $c ); } @@ -53,6 +61,22 @@ sub number_of_captures { return $captures; } +# the scheme defined at the end of the chain is the one we use +# but warn if too many. + +sub scheme { + my $self = shift; + my @chain = @{ $self->chain }; + my ($scheme, @more) = map { + exists $_->attributes->{Scheme} ? $_->attributes->{Scheme}[0] : (); + } reverse @chain; + + warn "$self is a chain with two many Scheme attributes (only one is allowed)" + if @more; + + return $scheme; +} + __PACKAGE__->meta->make_immutable; 1; @@ -79,6 +103,10 @@ Catalyst::ActionChain object representing a chain of these actions Returns the total number of captures for the entire chain of actions. +=head2 scheme + +Any defined scheme for the actionchain + =head2 meta Provided by Moose