From: Florian Ragwitz Date: Tue, 7 Oct 2008 22:41:34 +0000 (+0000) Subject: Improve error messages for forward/detach/visit/go. Patch by batman++ X-Git-Tag: 5.8000_03~47 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=3ea37672f96be0393a84199bf098d0111b347f33 Improve error messages for forward/detach/visit/go. Patch by batman++ --- diff --git a/lib/Catalyst/Dispatcher.pm b/lib/Catalyst/Dispatcher.pm index 69068fb..575b1a6 100644 --- a/lib/Catalyst/Dispatcher.pm +++ b/lib/Catalyst/Dispatcher.pm @@ -84,18 +84,6 @@ it with a C<+>, like so: +My::Dispatch::Type -=head2 $self->detach( $c, $command [, \@arguments ] ) - -Documented in L - -=cut - -sub detach { - my ( $self, $c, $command, @args ) = @_; - $c->forward( $command, @args ) if $command; - die $Catalyst::DETACH; -} - =head2 $self->dispatch($c) Delegate the dispatch to the action that matched the url, or return a @@ -177,7 +165,8 @@ sub _do_visit { my $error = qq/Couldn't $opname("$command"): /; if (!$action) { - $error .= qq/Invalid action or component./; + $error .= qq/Couldn't $opname to command "$command": / + .qq/Invalid action or component./; } elsif (!defined $action->namespace) { $error .= qq/Action has no namespace: cannot $opname() to a plain / @@ -226,30 +215,45 @@ Documented in L sub forward { my $self = shift; + $self->_do_forward(forward => @_); +} + +sub _do_forward { + my $self = shift; + my $opname = shift; my ( $c, $command ) = @_; my ( $action, $args ) = $self->_command2action(@_); - unless ($action) { - my $error = - qq/Couldn't forward to command "$command": / - . qq/Invalid action or component./; + if (!$action) { + my $error .= qq/Couldn't $opname to command "$command": / + .qq/Invalid action or component./; $c->error($error); $c->log->debug($error) if $c->debug; return 0; } - #push @$args, @_; - no warnings 'recursion'; my $orig_args = $c->request->arguments(); $c->request->arguments($args); $action->dispatch( $c ); $c->request->arguments($orig_args); - + return $c->state; } +=head2 $self->detach( $c, $command [, \@arguments ] ) + +Documented in L + +=cut + +sub detach { + my ( $self, $c, $command, @args ) = @_; + $self->_do_forward(detach => $c, $command, @args ) if $command; + die $Catalyst::DETACH; +} + sub _action_rel2abs { my ( $self, $c, $path ) = @_;