X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FDispatchType%2FChained.pm;h=3cd15f025659103d28ef92a8386a87fc517128b2;hp=2ac8c0c261925143b4c29c034ec5764768b24fba;hb=5dd46e24eedec447bdfbc4061ed683b5a17a7b0c;hpb=905679b8b9419c22d08e327cfc36f291b98e59c0 diff --git a/lib/Catalyst/DispatchType/Chained.pm b/lib/Catalyst/DispatchType/Chained.pm index 2ac8c0c..3cd15f0 100644 --- a/lib/Catalyst/DispatchType/Chained.pm +++ b/lib/Catalyst/DispatchType/Chained.pm @@ -98,7 +98,14 @@ sub list { @{ $self->_endpoints } ) { my $args = $endpoint->list_extra_info->{Args}; - my @parts = (defined($endpoint->attributes->{Args}[0]) ? (("*") x $args) : '...'); + + my @parts; + if($endpoint->has_args_constraints) { + @parts = map { "{$_}" } $endpoint->all_args_constraints; + } elsif(defined $endpoint->attributes->{Args}) { + @parts = (defined($endpoint->attributes->{Args}[0]) ? (("*") x $args) : '...'); + } + my @parents = (); my $parent = "DUMMY"; my $extra = $self->_list_extra_http_methods($endpoint); @@ -107,7 +114,12 @@ sub list { my $curr = $endpoint; while ($curr) { if (my $cap = $curr->list_extra_info->{CaptureArgs}) { - unshift(@parts, (("*") x $cap)); + if($curr->has_captures_constraints) { + my $names = join '/', map { "{$_}" } $curr->all_captures_constraints; + unshift(@parts, $names); + } else { + unshift(@parts, (("*") x $cap)); + } } if (my $pp = $curr->attributes->{PathPart}) { unshift(@parts, $pp->[0]) @@ -150,13 +162,14 @@ sub list { push(@rows, [ '', $name ]); } + my $endpoint_arg_info; if($endpoint->has_args_constraints) { my $tc = join ',', @{$endpoint->args_constraints}; - $endpoint .= " ($tc)"; + $endpoint_arg_info .= " ($tc)"; } else { - $endpoint .= defined($endpoint->attributes->{Args}[0]) ? " ($args)" : " (...)"; + $endpoint_arg_info .= defined($endpoint->attributes->{Args}[0]) ? " ($args)" : " (...)"; } - push(@rows, [ '', (@rows ? "=> " : '').($extra ? "$extra " : ''). ($scheme ? "$scheme: ":'')."/${endpoint}". ($consumes ? " :$consumes":"" ) ]); + push(@rows, [ '', (@rows ? "=> " : '').($extra ? "$extra " : ''). ($scheme ? "$scheme: ":'')."/${endpoint_arg_info}". ($consumes ? " :$consumes":"" ) ]); my @display_parts = map { $_ =~s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; decode_utf8 $_ } @parts; $rows[0][0] = join('/', '', @display_parts) || '/'; $paths->row(@$_) for @rows; @@ -289,12 +302,10 @@ sub recurse_match { else { { local $c->req->{arguments} = [ @{$c->req->args}, @parts ]; -warn $action; - next TRY_ACTION unless $action->match($c); } my $args_attr = $action->attributes->{Args}->[0]; - my $args_count = $action->normalized_arg_number; + my $args_count = $action->comparable_arg_number; my @pathparts = split /\//, $action->attributes->{PathPart}->[0]; # No best action currently # OR This one matches with fewer parts left than the current best action,