fixed absolute forward in root and cleaned tables
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Dispatcher.pm
index eb92137..b65c22a 100644 (file)
@@ -4,7 +4,6 @@ use strict;
 use base 'Class::Data::Inheritable';
 use Memoize;
 use Text::ASCIITable;
-use Text::ASCIITable::Wrap 'wrap';
 use Tree::Simple;
 use Tree::Simple::Visitor::FindByPath;
 
@@ -61,14 +60,17 @@ sub dispatch {
         }
 
         # Execute the auto chain
+        my $auto = 0;
         for my $auto ( @{ $c->get_action( 'auto', $namespace ) } ) {
             $c->execute( @{ $auto->[0] } );
             return if scalar @{ $c->error };
             last unless $c->state;
+            $auto++;
         }
 
         # Execute the action or last default
-        if ( ( my $action = $c->req->action ) && $c->state ) {
+        my $mkay = $auto ? $c->state ? 1 : 0 : 1;
+        if ( ( my $action = $c->req->action ) && $mkay ) {
             if ( my $result = @{ $c->get_action( $action, $default ) }[-1] ) {
                 $c->execute( @{ $result->[0] } );
             }
@@ -114,14 +116,17 @@ sub forward {
     if ( $command =~ /^\// ) {
         $command =~ /^(.*)\/(\w+)$/;
         $namespace = $1 || '/';
+        $namespace = s/^\/// if $namespace ne '/';
         $command = $2;
     }
     else { $namespace = _class2prefix($caller) || '/' }
     my $results = $c->get_action( $command, $namespace );
     unless ( @{$results} ) {
-        my $class = $command;
+        my $class = $command || '';
         if ( $class =~ /[^\w\:]/ ) {
-            $c->log->debug(qq/Couldn't forward to "$class"/) if $c->debug;
+            my $error = qq/Couldn't forward to "$class"/;
+            $c->error($error);
+            $c->log->debug($error) if $c->debug;
             return 0;
         }
         my $method = shift || 'process';
@@ -130,7 +135,9 @@ sub forward {
             $results = [ [ [ $class, $code ] ] ];
         }
         else {
-            $c->log->debug(qq/Couldn't forward to "$class->$method"/)
+            my $error = qq/Couldn't forward to "$class"/;
+            $c->error($error);
+            $c->log->debug($error)
               if $c->debug;
             return 0;
         }
@@ -231,6 +238,13 @@ sub set_action {
         elsif ( $attr =~ /^(Regex|Regexp)\((.+)\)$/i ) { $flags{regex} = $2 }
     }
 
+    if ( $flags{private} && ( keys %flags > 1 ) ) {
+        $c->log->debug( 'Bad action definition "'
+              . join( ' ', @{$attrs} )
+              . qq/" for "$namespace->$method"/ )
+          if $c->debug;
+        return;
+    }
     return unless keys %flags;
 
     my $parent  = $c->tree;
@@ -332,8 +346,7 @@ sub setup_actions {
         my $uid = $parent->getUID;
         for my $action ( keys %{ $actions->{private}->{$uid} } ) {
             my ( $class, $code ) = @{ $actions->{private}->{$uid}->{$action} };
-            $privates->addRow( wrap( "$prefix$action", 36 ),
-                wrap( $class, 37 ) );
+            $privates->addRow( "$prefix$action", $class, 37 );
         }
         $walker->( $walker, $_, $prefix ) for $parent->getAllChildren;
     };
@@ -348,7 +361,7 @@ sub setup_actions {
         my ( $class, $code ) = @{ $actions->{plain}->{$plain} };
         my $reverse = $self->actions->{reverse}->{$code};
         $reverse = $reverse ? "/$reverse" : $code;
-        $publics->addRow( wrap( "/$plain", 36 ), wrap( $reverse, 37 ) );
+        $publics->addRow( "/$plain", $reverse );
     }
     $self->log->debug( 'Loaded public actions', $publics->draw )
       if ( @{ $publics->{tbl_rows} } && $self->debug );
@@ -360,7 +373,7 @@ sub setup_actions {
         my ( $class, $code ) = @{ $actions->{regex}->{$regex} };
         my $reverse = $self->actions->{reverse}->{$code};
         $reverse = $reverse ? "/$reverse" : $code;
-        $regexes->addRow( wrap( $regex, 36 ), wrap( $reverse, 37 ) );
+        $regexes->addRow( $regex, $reverse );
     }
     $self->log->debug( 'Loaded regex actions', $regexes->draw )
       if ( @{ $regexes->{tbl_rows} } && $self->debug );