X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FAction.pm;h=0ddd7969234480861588cb01be1aed147529c9d0;hp=ca695c4d6bad48521be87e41d885acc44c4805b5;hb=141459fa3fc9852fd6f05138caddb410bbe2949c;hpb=4ab87e274ac0a05f98c10a4cdba467ba4398b0d3 diff --git a/lib/Catalyst/Action.pm b/lib/Catalyst/Action.pm index ca695c4..0ddd796 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,28 +46,42 @@ Returns the class name of this action Returns a code reference to this action -=head2 execute +=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 match +=head2 execute( $controller, $c, @args ) -Check Args setting, and makes sure number of args matches the setting. +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. =cut sub match { my ( $self, $c ) = @_; return 1 unless exists $self->attributes->{Args}; - return scalar(@{$c->req->args}) == $self->attributes->{Args}[0]; + my $args = $self->attributes->{Args}[0]; + return 1 unless defined($args) && length($args); + return scalar( @{ $c->req->args } ) == $args; } =head2 namespace