X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FDispatcher.pm;h=8f94316cd2624f4711425925e6fd3bfdba72cb6a;hb=a0eca83861c733269dbafbaafbcc3ca0b0101e2b;hp=b9bc30f0f5f6f7dbc601771945944f1e0b620820;hpb=694d15f1f6031de10d1ecb047b9e66dd0982e3a3;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Dispatcher.pm b/lib/Catalyst/Dispatcher.pm index b9bc30f..8f94316 100644 --- a/lib/Catalyst/Dispatcher.pm +++ b/lib/Catalyst/Dispatcher.pm @@ -58,7 +58,7 @@ sub dispatch { my ( $self, $c ) = @_; if ( $c->action ) { - $c->forward( join( '/', '', $c->namespace, '_DISPATCH' ) ); + $c->forward( join( '/', '', $c->action->namespace, '_DISPATCH' ) ); } else { @@ -80,6 +80,13 @@ sub forward { my $c = shift; my $command = shift; + # Get the calling class + my $caller = ( caller(0) )[0]; + if ( $caller->isa('Catalyst') ) { + if ( ( caller(2) )[3] =~ /detach$/ ) { $caller = caller(3) } + elsif ( ( caller(0) )[3] =~ /forward$/ ) { $caller = caller(1) } + } + unless ($command) { $c->log->debug('Nothing to forward to') if $c->debug; return 0; @@ -93,8 +100,11 @@ sub forward { my $command_copy = $command; unless ( $command_copy =~ s/^\/// ) { - my $namespace = $c->namespace; - $command_copy = "${namespace}/${command}"; + my $prefix = + Catalyst::Utils::class2prefix( $caller, + $c->config->{case_sensitive} ) + || ''; + $command_copy = "${prefix}/${command}"; } unless ( $command_copy =~ /\// ) { @@ -268,6 +278,10 @@ sub get_containers { return map { $_->getNodeValue } @match; } +=item $self->register( $c, $action ) + +=cut + sub register { my ( $self, $c, $action ) = @_;