sub detach {
my ( $c, $command, @args ) = @_;
$c->forward( $command, @args ) if $command;
+ # die with DETACH signal, which will be caught in dispatching.
die $Catalyst::Engine::DETACH;
}
$c->execute( @{ $end->[0] } );
return if scalar @{ $c->error };
}
- }
-
- else {
+ } else {
my $path = $c->req->path;
my $error = $path
? qq/Unknown resource "$path"/
unless ( @{$results} ) {
- unless ( $c->components->{$command} ) {
+ unless ( defined( $c->components->{$command} ) ) {
my $error =
qq/Couldn't forward to command "$command". Invalid action or component./;
$c->error($error);
if ( my $code = $c->components->{$class}->can($method) ) {
$c->actions->{reverse}->{"$code"} = "$class->$method";
$results = [ [ [ $class, $code ] ] ];
- }
-
- else {
+ } else {
my $error =
qq/Couldn't forward to "$class". Does not implement "$method"/;
$c->error($error);
push @results, [$result] if $result;
my $visitor = Tree::Simple::Visitor::FindByPath->new;
+ SEARCH:
for my $part ( split '/', $namespace ) {
$visitor->setSearchPath($part);
$parent->accept($visitor);
my $uid = $child->getUID if $child;
my $match = $c->actions->{private}->{$uid}->{$action} if $uid;
push @results, [$match] if $match;
- $parent = $child if $child;
+ if ($child) {
+ $parent = $child;
+ }
+ else {
+ last SEARCH;
+ }
}
}