nicer action sorting for Path
[catagits/Catalyst-Runtime.git] / lib / Catalyst / DispatchType / Path.pm
index b51f06c..50fbf84 100644 (file)
@@ -6,7 +6,6 @@ extends 'Catalyst::DispatchType';
 use Text::SimpleTable;
 use Catalyst::Utils;
 use URI;
-use Scalar::Util ();
 
 has _paths => (
                is => 'rw',
@@ -49,7 +48,7 @@ Debug output for Path dispatch points
 sub list {
     my ( $self, $c ) = @_;
     my $column_width = Catalyst::Utils::term_width() - 35 - 9;
-    my $paths = Text::SimpleTable->new( 
+    my $paths = Text::SimpleTable->new(
        [ 35, 'Path' ], [ $column_width, 'Private' ]
     );
     foreach my $path ( sort keys %{ $self->_paths } ) {
@@ -62,16 +61,6 @@ sub list {
       if ( keys %{ $self->_paths } );
 }
 
-sub _action_args_sort_order {
-    my ( $self, $action ) = @_;
-
-    my ($args) = @{ $action->attributes->{Args} || [] };
-
-    return $args if Scalar::Util::looks_like_number($args);
-
-    return ~0;
-}
-
 =head2 $self->match( $c, $path )
 
 For each action registered to this exact path, offers the action a chance to
@@ -85,12 +74,7 @@ sub match {
 
     $path = '/' if !defined $path || !length $path;
 
-    # sort from least args to most
-    my @actions = sort { $self->_action_args_sort_order($a) <=>
-                         $self->_action_args_sort_order($b) }
-            @{ $self->_paths->{$path} || [] };
-
-    foreach my $action ( @actions ) {
+    foreach my $action ( @{ $self->_paths->{$path} || [] } ) {
         next unless $action->match($c);
         $c->req->action($path);
         $c->req->match($path);
@@ -133,6 +117,8 @@ sub register_path {
 
     unshift( @{ $self->_paths->{$path} ||= [] }, $action);
 
+    $self->_paths->{$path} = [ sort @{ $self->_paths->{$path} } ];
+
     return 1;
 }
 
@@ -165,7 +151,7 @@ Catalyst Contributors, see Catalyst.pm
 
 =head1 COPYRIGHT
 
-This program is free software, you can redistribute it and/or modify it under
+This library is free software. You can redistribute it and/or modify it under
 the same terms as Perl itself.
 
 =cut