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=8c51d1390c63eb2654c4d766f88353774593b15b;hp=e9c936303d235f5dbff4826e4c4b3ff700fdb77c;hb=3c0da3ece98e535f1c168bb985980583498894ad;hpb=009b5b2324f83396439a494a56684efb60eb2cd8 diff --git a/lib/Catalyst/Action.pm b/lib/Catalyst/Action.pm index e9c9363..8c51d13 100644 --- a/lib/Catalyst/Action.pm +++ b/lib/Catalyst/Action.pm @@ -55,8 +55,6 @@ use overload ( no warnings 'recursion'; -#__PACKAGE__->mk_accessors(qw/class namespace reverse attributes name code/); - sub dispatch { # Execute ourselves against a context my ( $self, $c ) = @_; return $c->execute( $self->class, $self ); @@ -78,18 +76,35 @@ sub match { return scalar( @{ $c->req->args } ) == $args; } +sub match_captures { 1 } + sub compare { my ($a1, $a2) = @_; my ($a1_args) = @{ $a1->attributes->{Args} || [] }; my ($a2_args) = @{ $a2->attributes->{Args} || [] }; - $_ = looks_like_number($_) ? $_ : ~0 + $_ = looks_like_number($_) ? $_ : ~0 for $a1_args, $a2_args; return $a1_args <=> $a2_args; } +sub number_of_args { + my ( $self ) = @_; + return 0 unless exists $self->attributes->{Args}; + return $self->attributes->{Args}[0]; +} + +sub number_of_captures { + my ( $self ) = @_; + + return 0 unless exists $self->attributes->{CaptureArgs}; + return $self->attributes->{CaptureArgs}[0] || 0; +} + +sub list_extra_info { } + __PACKAGE__->meta->make_immutable; 1; @@ -105,7 +120,9 @@ and so on. This determines how the action is dispatched to. =head2 class -Returns the class name where this action is defined. +Returns the name of the component where this action is defined. +Derived by calling the L +method on each component. =head2 code @@ -113,7 +130,7 @@ Returns a code reference to this action. =head2 dispatch( $c ) -Dispatch this action against a context +Dispatch this action against a context. =head2 execute( $controller, $c, @args ) @@ -125,6 +142,16 @@ context and arguments Check Args attribute, and makes sure number of args matches the setting. Always returns true if Args is omitted. +=head2 match_captures ($c, $captures) + +Can be implemented by action class and action role authors. If the method +exists, then it will be called with the request context and an array reference +of the captures for this action. + +Returning true from this method causes the chain match to continue, returning +makes the chain not match (and alternate, less preferred chains will be attempted). + + =head2 compare Compares 2 actions based on the value of the C attribute, with no C @@ -145,11 +172,23 @@ C of an action is always suitable for passing to C. =head2 name -returns the sub name of this action. +Returns the sub name of this action. + +=head2 number_of_args + +Returns the number of args this action expects. This is 0 if the action doesn't take any arguments and undef if it will take any number of arguments. + +=head2 number_of_captures + +Returns the number of captures this action expects for L actions. + +=head2 list_extra_info + +An array of values useful to improve debugging =head2 meta -Provided by Moose +Provided by Moose. =head1 AUTHORS