From: Matt S Trout Date: Thu, 18 May 2006 21:32:50 +0000 (+0000) Subject: Separated execute and dispatch on Catalyst::Action X-Git-Tag: 5.7099_04~589 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=b8f669f3c51dab87bfe9387dbaac0c07027abcfd Separated execute and dispatch on Catalyst::Action --- diff --git a/Changes b/Changes index fd155be..366ce5b 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,6 @@ This file documents the revision history for Perl extension Catalyst. + - Separated execute and dispatch on Catalyst::Action - cleaned up logging and debug output - minor doc fixes - Added warning for setup being called twice diff --git a/lib/Catalyst/Action.pm b/lib/Catalyst/Action.pm index 0e132f5..ce587ac 100644 --- a/lib/Catalyst/Action.pm +++ b/lib/Catalyst/Action.pm @@ -10,8 +10,8 @@ use overload ( # Stringify to reverse for debug output etc. q{""} => sub { shift->{reverse} }, - # Codulate to encapsulated action coderef - '&{}' => sub { shift->{code} }, + # Codulate to execute to invoke the encapsulated action coderef + '&{}' => sub { my $self = shift; sub { $self->execute(@_); }; }, # Make general $stuff still work fallback => 1, @@ -46,18 +46,30 @@ Returns the class name of this action Returns a code reference to this action -=head2 execute( $c ) +=head2 dispatch( $c ) -Execute this action against a context +Dispatch this action against a context =cut -sub execute { # Execute ourselves against a context +sub dispatch { # Execute ourselves against a context my ( $self, $c ) = @_; local $c->namespace = $self->namespace; return $c->execute( $self->class, $self ); } +=head2 execute( $controller, $c, @args ) + +Execute this action's coderef against a given controller with a given +context and arguments + +=cut + +sub execute { + my $self = shift; + $self->{code}->(@_); +} + =head2 match( $c ) Check Args attribute, and makes sure number of args matches the setting. @@ -67,7 +79,7 @@ Check Args attribute, and makes sure number of args matches the setting. sub match { my ( $self, $c ) = @_; return 1 unless exists $self->attributes->{Args}; - return scalar(@{$c->req->args}) == $self->attributes->{Args}[0]; + return scalar( @{ $c->req->args } ) == $self->attributes->{Args}[0]; } =head2 namespace diff --git a/lib/Catalyst/Base.pm b/lib/Catalyst/Base.pm index b1990e9..ea2063a 100644 --- a/lib/Catalyst/Base.pm +++ b/lib/Catalyst/Base.pm @@ -27,7 +27,7 @@ sub _BEGIN : Private { my ( $self, $c ) = @_; my $begin = ( $c->get_actions( 'begin', $c->namespace ) )[-1]; return 1 unless $begin; - $begin->execute($c); + $begin->dispatch( $c ); return !@{ $c->error }; } @@ -35,7 +35,7 @@ sub _AUTO : Private { my ( $self, $c ) = @_; my @auto = $c->get_actions( 'auto', $c->namespace ); foreach my $auto (@auto) { - $auto->execute($c); + $auto->dispatch( $c ); return 0 unless $c->state; } return 1; @@ -47,7 +47,7 @@ sub _ACTION : Private { && $c->action->can('execute') && $c->req->action ) { - $c->action->execute($c); + $c->action->dispatch( $c ); } return !@{ $c->error }; } @@ -56,7 +56,7 @@ sub _END : Private { my ( $self, $c ) = @_; my $end = ( $c->get_actions( 'end', $c->namespace ) )[-1]; return 1 unless $end; - $end->execute($c); + $end->dispatch( $c ); return !@{ $c->error }; } diff --git a/lib/Catalyst/Dispatcher.pm b/lib/Catalyst/Dispatcher.pm index 96dc2ad..c03f1b3 100644 --- a/lib/Catalyst/Dispatcher.pm +++ b/lib/Catalyst/Dispatcher.pm @@ -159,7 +159,7 @@ sub forward { #push @$args, @_; local $c->request->{arguments} = $args; - $action->execute($c); + $action->dispatch( $c ); return $c->state; }