[Catalyst-commits] r13713 -
Catalyst-Runtime/5.80/trunk/lib/Catalyst/DispatchType
ferz at dev.catalyst.perl.org
ferz at dev.catalyst.perl.org
Sat Nov 27 21:15:28 GMT 2010
Author: ferz
Date: 2010-11-27 21:15:28 +0000 (Sat, 27 Nov 2010)
New Revision: 13713
Modified:
Catalyst-Runtime/5.80/trunk/lib/Catalyst/DispatchType/Chained.pm
Log:
Fixed chained action order resolution to pass t/aggregate/live__component_controller_action_chained2.t and without break any other test.
Modified: Catalyst-Runtime/5.80/trunk/lib/Catalyst/DispatchType/Chained.pm
===================================================================
--- Catalyst-Runtime/5.80/trunk/lib/Catalyst/DispatchType/Chained.pm 2010-11-23 17:05:36 UTC (rev 13712)
+++ Catalyst-Runtime/5.80/trunk/lib/Catalyst/DispatchType/Chained.pm 2010-11-27 21:15:28 UTC (rev 13713)
@@ -187,6 +187,7 @@
return () unless $children;
my $best_action;
my @captures;
+ my $found=0;
TRY: foreach my $try_part (sort { length($b) <=> length($a) }
keys %$children) {
# $b then $a to try longest part first
@@ -197,6 +198,7 @@
splice( # and strip them off @parts as well
@parts, 0, scalar(@{[split('/', $try_part)]})
))); # @{[]} to avoid split to @_
+ $found=1;
}
my @try_actions = @{$children->{$try_part}};
TRY_ACTION: foreach my $action (@try_actions) {
@@ -212,7 +214,7 @@
push(@captures, splice(@parts, 0, $capture_attr->[0]));
# try the remaining parts against children of this action
- my ($actions, $captures, $action_parts) = $self->recurse_match(
+ my ($actions, $captures, $action_parts, $found) = $self->recurse_match(
$c, '/'.$action->reverse, \@parts
);
# No best action currently
@@ -220,13 +222,15 @@
# OR The action has equal parts but less captured data (ergo more defined)
if ($actions &&
(!$best_action ||
- $#$action_parts < $#{$best_action->{parts}} ||
+ $#$action_parts < $#{$best_action->{parts}} ||
($#$action_parts == $#{$best_action->{parts}} &&
- $#$captures < $#{$best_action->{captures}}))){
+ $#$captures < $#{$best_action->{captures}} && ($found > $best_action->{found})
+ ))) {
$best_action = {
actions => [ $action, @$actions ],
captures=> [ @captures, @$captures ],
- parts => $action_parts
+ parts => $action_parts,
+ found=>$found
};
}
}
@@ -250,13 +254,14 @@
$best_action = {
actions => [ $action ],
captures=> [],
- parts => \@parts
+ parts => \@parts,
+ found=>$found,
}
}
}
}
}
- return @$best_action{qw/actions captures parts/} if $best_action;
+ return @$best_action{qw/actions captures parts found/} if $best_action;
return ();
}
More information about the Catalyst-commits
mailing list