sub forward {
my $c = shift;
my $command = shift;
+ $c->state(0);
unless ($command) {
$c->log->debug('Nothing to forward to') if $c->debug;
return 0;
}
my $results = $c->get_action( $command, $namespace );
if ( @{$results} ) {
- if ( $command =~ /^\!/ ) {
- for my $result ( @{$results} ) {
- my ( $class, $code ) = @{ $result->[0] };
- $c->state( $c->process( $class, $code ) );
- }
- }
- else {
- return 0 unless my $result = $results->[0];
- if ( $result->[2] ) {
+ unless ( $command =~ /^\!/ ) {
+ $results = [ pop @{$results} ];
+ if ( $results->[0]->[2] ) {
$c->log->debug(qq/Couldn't forward "$command" to regex action/)
if $c->debug;
return 0;
}
- my ( $class, $code ) = @{ $result->[0] };
- $class = $c->components->{$class} || $class;
- $c->state( $c->process( $class, $code ) );
}
}
else {
my $method = shift || 'process';
if ( my $code = $class->can($method) ) {
$c->actions->{reverse}->{"$code"} = "$class->$method";
- $class = $c->comp($class) || $class;
- $c->state( $c->process( $class, $code ) );
+ $results = [ [ [ $class, $code ] ] ];
}
else {
$c->log->debug(qq/Couldn't forward to "$class->$method"/)
return 0;
}
}
+ for my $result ( @{$results} ) {
+ my ( $class, $code ) = @{ $result->[0] };
+ $class = $c->comp->{$class} || $class;
+ $c->state( $c->process( $class, $code ) );
+ }
return $c->state;
}