Update docs with new methods in ::Controller, update TODO
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Controller.pm
index e821a46..81be71d 100644 (file)
@@ -1,7 +1,7 @@
 package Catalyst::Controller;
 
 use Moose;
-use Moose::Util qw/find_meta does_role/;
+use Moose::Util qw/find_meta/;
 
 use namespace::clean -except => 'meta';
 
@@ -52,9 +52,9 @@ Catalyst::Controller - Catalyst Controller base class
   package MyApp::Controller::Search
   use base qw/Catalyst::Controller/;
 
-  sub foo : Local { 
+  sub foo : Local {
     my ($self,$c,@args) = @_;
-    ... 
+    ...
   } # Dispatches to /search/foo
 
 =head1 DESCRIPTION
@@ -127,7 +127,7 @@ sub action_for {
     return $app->dispatcher->get_action($name, $self->action_namespace);
 }
 
-#my opinion is that this whole sub really should be a builder method, not 
+#my opinion is that this whole sub really should be a builder method, not
 #something that happens on every call. Anyone else disagree?? -- groditi
 ## -- apparently this is all just waiting for app/ctx split
 around action_namespace => sub {
@@ -174,15 +174,26 @@ around path_prefix => sub {
     return $namespace;
 };
 
+sub get_action_methods {
+    my $self = shift;
+    my $meta = find_meta($self);
+    confess("Metaclass for " . ref($meta) ." for " . $meta->name
+        . " cannot support register_actions.")
+        unless $meta->can('get_all_methods_with_attributes');
+    my @methods = $meta->get_all_methods_with_attributes;
+    return @methods;
+}
 
 sub register_actions {
     my ( $self, $c ) = @_;
+    $self->register_action_methods( $c, $self->get_action_methods );
+}
+
+sub register_action_methods {
+    my ( $self, $c, @methods ) = @_;
     my $class = ref $self || $self;
     #this is still not correct for some reason.
     my $namespace = $self->action_namespace($c);
-    my $meta = find_meta($self);
-    my @methods = grep { does_role($_, 'MooseX::MethodAttributes::Role::Meta::Method') }
-            $meta->get_all_methods;
 
     foreach my $method (@methods) {
         my $name = $method->name;
@@ -319,7 +330,7 @@ sub _parse_LocalRegex_attr {
 
     my $prefix = $self->path_prefix( $c );
     $prefix .= '/' if length( $prefix );
-   
+
     return ( 'Regex', "^${prefix}${value}" );
 }
 
@@ -399,28 +410,22 @@ controller name. For instance controller 'MyApp::Controller::Foo::Bar'
 will be bound to 'foo/bar'. The default Root controller is an example
 of setting namespace to '' (the null string).
 
-=head2 path 
+=head2 path
 
 Sets 'path_prefix', as described below.
 
 =head1 METHODS
 
-=head2 $class->new($app, @args)
+=head2 BUILDARGS ($app, @args)
 
-Proxies through to NEXT::new and stashes the application instance as
-$self->_application.
+From L<Catalyst::Component::ApplicationAttribute>, stashes the application
+instance as $self->_application.
 
 =head2 $self->action_for('name')
 
 Returns the Catalyst::Action object (if any) for a given method name
 in this component.
 
-=head2 $self->register_actions($c)
-
-Finds all applicable actions for this component, creates
-Catalyst::Action objects (using $self->create_action) for them and
-registers them with $c->dispatcher.
-
 =head2 $self->action_namespace($c)
 
 Returns the private namespace for actions in this component. Defaults
@@ -435,13 +440,28 @@ Returns the default path prefix for :PathPrefix, :Local, :LocalRegex and
 relative :Path actions in this component. Defaults to the action_namespace or
 can be overridden from the "path" config key.
 
+=head2 $self->register_actions($c)
+
+Finds all applicable actions for this component, creates
+Catalyst::Action objects (using $self->create_action) for them and
+registers them with $c->dispatcher.
+
+=head2 $self->get_action_methods()
+
+Returns a list of L<Moose::Meta::Method> objects, doing the
+L<MooseX::MethodAttributes::Role::Meta::Method> role, which are the set of
+action methods for this package.
+
+=head2 $self->register_action_methods($c, @methods)
+
+Creates action objects for a set of action methods using C< create_action >,
+and registers them with the dispatcher.
+
 =head2 $self->create_action(%args)
 
 Called with a hash of data to be use for construction of a new
 Catalyst::Action (or appropriate sub/alternative class) object.
 
-Primarily designed for the use of register_actions.
-
 =head2 $self->_application
 
 =head2 $self->_app