X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FDispatcher.pm;h=cd56ad4d8c51bcf5ed9467999ac46254ce99c31c;hb=ea5126a6c7f135eece1103e03432698134b29fac;hp=31e1d026ea5748cf8b418fa261d0769426063fc0;hpb=ba599d1c7a0c3219cd3825264c44d22362ed179a;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Dispatcher.pm b/lib/Catalyst/Dispatcher.pm index 31e1d02..cd56ad4 100644 --- a/lib/Catalyst/Dispatcher.pm +++ b/lib/Catalyst/Dispatcher.pm @@ -55,7 +55,7 @@ sub dispatch { my ( $self, $c ) = @_; if ( $c->action ) { - $c->forward( join('/', '', $c->namespace, '_DISPATCH') ); + $c->forward( join( '/', '', $c->namespace, '_DISPATCH' ) ); } else { @@ -88,7 +88,7 @@ sub forward { my $arguments = ( ref( $_[-1] ) eq 'ARRAY' ) ? pop(@_) : $c->req->args; - my $results = []; + my $result; my $command_copy = $command; @@ -100,14 +100,14 @@ sub forward { } unless ( $command_copy =~ /\// ) { - $results = $c->get_action( $command_copy, '/' ); + $result = $c->get_action( $command_copy, '/' ); } else { my @extra_args; DESCEND: while ( $command_copy =~ s/^(.*)\/(\w+)$/$1/ ) { my $tail = $2; - $results = $c->get_action( $tail, $1 ); - if ( @{$results} ) { + $result = $c->get_action( $tail, $1 ); + if ( $result ) { $command = $tail; push( @{$arguments}, @extra_args ); last DESCEND; @@ -116,7 +116,7 @@ sub forward { } } - unless ( @{$results} ) { + unless ( $result ) { unless ( $c->components->{$command} ) { my $error = @@ -139,7 +139,7 @@ qq/Couldn't forward to command "$command". Invalid action or component./; namespace => $class, } ); - $results = [ [$action] ]; + $result = $action; } else { @@ -155,11 +155,7 @@ qq/Couldn't forward to command "$command". Invalid action or component./; local $c->request->{arguments} = [ @{$arguments} ]; - for my $result ( @{$results} ) { - $result->[0]->execute($c); - return if scalar @{ $c->error }; - last unless $c->state; - } + $result->execute($c); return $c->state; } @@ -197,41 +193,46 @@ sub prepare_action { if ( $c->debug && @args ); } -=item $self->get_action( $c, $action, $namespace, $inherit ) +=item $self->get_action( $c, $action, $namespace ) =cut sub get_action { - my ( $self, $c, $action, $namespace, $inherit ) = @_; + my ( $self, $c, $action, $namespace ) = @_; return [] unless $action; $namespace ||= ''; $namespace = '' if $namespace eq '/'; - $inherit ||= 0; my @match = $self->get_containers($namespace); - if ($inherit) { # Return [ [ $act_obj ], ... ] for valid containers - return [ - map { [ $_->{$action} ] } # Make [ $action_obj ] - grep { defined $_->{$action} } # If it exists in the container - map { $_->actions } # Get action hash for container - @match - ]; - } - else { - my $node = $match[-1]->actions; # Only bother looking at the last one + my $node = $match[-1]->actions; # Only bother looking at the last one - if ( defined $node->{$action} - && ( $node->{$action}->namespace eq $namespace ) ) - { - return [ [ $node->{$action} ] ]; - } - else { - return []; - } + if ( defined $node->{$action} + && ( $node->{$action}->namespace eq $namespace ) ) + { + return $node->{$action}; } } +=item $self->get_actions( $c, $action, $namespace ) + +=cut + +sub get_actions { + my ( $self, $c, $action, $namespace ) = @_; + return [] unless $action; + $namespace ||= ''; + $namespace = '' if $namespace eq '/'; + + my @match = $self->get_containers($namespace); + + return + map { $_->{$action} } + grep { defined $_->{$action} } # If it exists in the container + map { $_->actions } # Get action hash for container + @match +} + =item $self->get_containers( $namespace ) =cut @@ -448,6 +449,9 @@ sub setup_actions { for my $action ( keys %{$node} ) { my $action_obj = $node->{$action}; + next + if ( ( $action =~ /^_.*/ ) + && ( !$c->config->{show_internal_actions} ) ); $privates->addRow( "$prefix$action", $action_obj->class ); }