Fixed some bugs and improved logs
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Dispatcher.pm
index bb7b444..5fc33c0 100644 (file)
@@ -80,8 +80,6 @@ sub forward {
     my $c       = shift;
     my $command = shift;
 
-    $command = ref $command if ref $command;
-
     unless ($command) {
         $c->log->debug('Nothing to forward to') if $c->debug;
         return 0;
@@ -91,35 +89,38 @@ sub forward {
 
     my $result;
 
-    my $command_copy = $command;
+    unless ( ref $command ) {
+        my $command_copy = $command;
 
-    unless ( $command_copy =~ s/^\/// ) {
-        my $namespace = $c->namespace;
-        $command_copy = "${namespace}/${command}";
-    }
+        unless ( $command_copy =~ s/^\/// ) {
+            my $namespace = $c->namespace;
+            $command_copy = "${namespace}/${command}";
+        }
 
-    unless ( $command_copy =~ /\// ) {
-        $result = $c->get_action( $command_copy, '/' );
-    }
-    else {
-        my @extra_args;
-      DESCEND: while ( $command_copy =~ s/^(.*)\/(\w+)$/$1/ ) {
-            my $tail = $2;
-            $result = $c->get_action( $tail, $1 );
-            if ($result) {
-                $command = $tail;
-                push( @{$arguments}, @extra_args );
-                last DESCEND;
+        unless ( $command_copy =~ /\// ) {
+            $result = $c->get_action( $command_copy, '/' );
+        }
+        else {
+            my @extra_args;
+          DESCEND: while ( $command_copy =~ s/^(.*)\/(\w+)$/$1/ ) {
+                my $tail = $2;
+                $result = $c->get_action( $tail, $1 );
+                if ($result) {
+                    $command = $tail;
+                    push( @{$arguments}, @extra_args );
+                    last DESCEND;
+                }
+                unshift( @extra_args, $tail );
             }
-            unshift( @extra_args, $tail );
         }
     }
 
     unless ($result) {
 
-        my $comp;
+        my $class  = ref($command) || ref( $c->component($command) );
+        my $method = shift         || 'process';
 
-        unless ( $comp = $c->component($command) ) {
+        unless ($class) {
             my $error =
 qq/Couldn't forward to command "$command". Invalid action or component./;
             $c->error($error);
@@ -127,9 +128,6 @@ qq/Couldn't forward to command "$command". Invalid action or component./;
             return 0;
         }
 
-        my $class  = ref $comp;
-        my $method = shift || 'process';
-
         if ( my $code = $class->can($method) ) {
             my $action = $self->method_action_class->new(
                 {
@@ -194,12 +192,12 @@ sub prepare_action {
       if ( $c->debug && @args );
 }
 
-=item $self->get_action( $c, $action, $namespace )
+=item $self->get_action( $action, $namespace )
 
 =cut
 
 sub get_action {
-    my ( $self, $c, $name, $namespace ) = @_;
+    my ( $self, $name, $namespace ) = @_;
     return unless $name;
     $namespace ||= '';
     $namespace = '' if $namespace eq '/';
@@ -208,7 +206,7 @@ sub get_action {
 
     return unless @match;
 
-    if ( my $action = $match[-1]->get_action( $c, $name ) ) {
+    if ( my $action = $match[-1]->get_action($name) ) {
         return $action if $action->namespace eq $namespace;
     }
 }
@@ -225,7 +223,7 @@ sub get_actions {
 
     my @match = $self->get_containers($namespace);
 
-    return map { $_->get_action( $c, $action ) } @match;
+    return map { $_->get_action($action) } @match;
 }
 
 =item $self->get_containers( $namespace )
@@ -260,11 +258,11 @@ sub get_containers {
         # should catch any failures - or short-circuit this if this *is* a
         # bug in the visitor and gets fixed.
 
-        my $extra = $path[ ( scalar @match ) - 1 ];
-        last unless $extra;
-        $visitor->setSearchPath($extra);
-        $match[-1]->accept($visitor);
-        push( @match, $visitor->getResult ) if defined $visitor->getResult;
+        if ( my $extra = $path[ ( scalar @match ) - 1 ] ) {
+            $visitor->setSearchPath($extra);
+            $match[-1]->accept($visitor);
+            push( @match, $visitor->getResult ) if defined $visitor->getResult;
+        }
     }
 
     return map { $_->getNodeValue } @match;
@@ -348,8 +346,6 @@ sub setup_actions {
       Catalyst::ActionContainer->new( { part => '/', actions => {} } );
     $self->tree( Tree::Simple->new( $container, Tree::Simple->ROOT ) );
 
-    $c->register_actions($c);
-
     foreach my $comp ( values %{ $c->components } ) {
         $comp->register_actions($c) if $comp->can('register_actions');
     }
@@ -365,7 +361,11 @@ sub setup_actions {
 
     return unless $c->debug;
 
-    my $privates = Text::SimpleTable->new( [ 36, 'Private' ], [ 37, 'Class' ] );
+    my $privates = Text::SimpleTable->new(
+        [ 24, 'Private' ],
+        [ 23, 'Class' ],
+        [ 23, 'Method' ]
+    );
 
     my $has_private = 0;
     my $walker = sub {
@@ -379,7 +379,7 @@ sub setup_actions {
             next
               if ( ( $action =~ /^_.*/ )
                 && ( !$c->config->{show_internal_actions} ) );
-            $privates->row( "$prefix$action", $action_obj->class );
+            $privates->row( "$prefix$action", $action_obj->class, $action );
             $has_private = 1;
         }