X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FActionChain.pm;h=4f72839798fe637fb2244827759b3eef0ffea443;hp=0b58602c72e2d5d90753355876dbbcad15ea8c11;hb=b007fcc611c8584b634e27a60ebfe5b6f518601a;hpb=342d21698a97962c51114b6ebc6bb8626511cfc6 diff --git a/lib/Catalyst/ActionChain.pm b/lib/Catalyst/ActionChain.pm index 0b58602..4f72839 100644 --- a/lib/Catalyst/ActionChain.pm +++ b/lib/Catalyst/ActionChain.pm @@ -37,7 +37,7 @@ sub dispatch { # 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 explictly sets + # 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; @@ -61,6 +61,28 @@ sub number_of_captures { return $captures; } +sub match_captures { + my ($self, $c, $captures) = @_; + my @captures = @{$captures||[]}; + + foreach my $link(@{$self->chain}) { + my @local_captures = splice @captures,0,$link->number_of_captures; + return unless $link->match_captures($c, \@local_captures); + } + return 1; +} +sub match_captures_constraints { + my ($self, $c, $captures) = @_; + my @captures = @{$captures||[]}; + + foreach my $link(@{$self->chain}) { + my @local_captures = splice @captures,0,$link->number_of_captures; + next unless $link->has_captures_constraints; + return unless $link->match_captures_constraints($c, \@local_captures); + } + return 1; +} + # the scheme defined at the end of the chain is the one we use # but warn if too many. @@ -103,6 +125,10 @@ Catalyst::ActionChain object representing a chain of these actions Returns the total number of captures for the entire chain of actions. +=head2 match_captures + +Match all the captures that this chain encloses, if any. + =head2 scheme Any defined scheme for the actionchain