X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FDispatchType%2FChildOf.pm;h=f54e322b17879978ed98fdbc2662977da8a3e72c;hp=9b58d859617149d35dc47ce8a15d63855eb18944;hb=7a7ac23cbfaba1c66a454132313ceb7e885ab98b;hpb=47f9968d8f98b55d7f1620ade066fcf52feeb42d diff --git a/lib/Catalyst/DispatchType/ChildOf.pm b/lib/Catalyst/DispatchType/ChildOf.pm index 9b58d85..f54e322 100644 --- a/lib/Catalyst/DispatchType/ChildOf.pm +++ b/lib/Catalyst/DispatchType/ChildOf.pm @@ -127,21 +127,13 @@ sub recurse_match { } my @try_actions = @{$children->{$try_part}}; TRY_ACTION: foreach my $action (@try_actions) { - if (my $args_attr = $action->attributes->{Args}) { - # XXX alternative non-Args way to identify an endpoint? - { - local $c->req->{arguments} = [ @{$c->req->args}, @parts ]; - next TRY_ACTION unless $action->match($c); - } - push(@{$c->req->args}, @parts); - return [ $action ], [ ]; - } else { + if (my $capture_attr = $action->attributes->{Captures}) { my @captures; my @parts = @parts; # localise - if (my $capture_attr = $action->attributes->{Captures}) { - # strip Captures into list - push(@captures, splice(@parts, 0, $capture_attr->[0])); - } + + # strip Captures into list + push(@captures, splice(@parts, 0, $capture_attr->[0])); + # try the remaining parts against children of this action my ($actions, $captures) = $self->recurse_match( $c, '/'.$action->reverse, \@parts @@ -149,6 +141,13 @@ sub recurse_match { if ($actions) { return [ $action, @$actions ], [ @captures, @$captures ]; } + } else { + { + local $c->req->{arguments} = [ @{$c->req->args}, @parts ]; + next TRY_ACTION unless $action->match($c); + } + push(@{$c->req->args}, @parts); + return [ $action ], [ ]; } } } @@ -206,7 +205,7 @@ sub register { ($self->{actions} ||= {})->{'/'.$action->reverse} = $action; - if ($action->attributes->{Args}) { + unless ($action->attributes->{Captures}) { unshift(@{ $self->{endpoints} ||= [] }, $action); }