[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