finished the scheme matching and uri_for updates
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Action.pm
index 8d187a0..881c120 100644 (file)
@@ -76,6 +76,8 @@ sub match {
     return scalar( @{ $c->req->args } ) == $args;
 }
 
+sub match_captures { 1 }
+
 sub compare {
     my ($a1, $a2) = @_;
 
@@ -88,6 +90,31 @@ sub compare {
     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 scheme {
+  return exists $_[0]->attributes->{Scheme} ? $_[0]->attributes->{Scheme}[0] : undef;
+}
+
+sub list_extra_info {
+  my $self = shift;
+  return {
+    Args => $self->attributes->{Args}[0],
+    CaptureArgs => $self->number_of_captures,
+  }
+} 
+
 __PACKAGE__->meta->make_immutable;
 
 1;
@@ -103,8 +130,8 @@ and so on. This determines how the action is dispatched to.
 
 =head2 class
 
-Returns the class name of the component where this action is defined.
-Derived by calling the L<Catalyst::Component/_component_class|_component_class>
+Returns the name of the component where this action is defined.
+Derived by calling the L<catalyst_component_name|Catalyst::Component/catalyst_component_name>
 method on each component.
 
 =head2 code
@@ -113,7 +140,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 +152,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<Args> attribute, with no C<Args>
@@ -145,11 +182,27 @@ C<private_path> of an action is always suitable for passing to C<forward>.
 
 =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<Chained|Catalyst::DispatchType::Chained> actions.
+
+=head2 list_extra_info
+
+A HashRef of key-values that an action can provide to a debugging screen
+
+=head2 scheme
+
+Any defined scheme for the action
 
 =head2 meta
 
-Provided by Moose
+Provided by Moose.
 
 =head1 AUTHORS