Document the horrible, changelog. I'm going to merge this and fix a real issue as...
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Controller.pm
index 49591d3..27b5d0f 100644 (file)
@@ -71,14 +71,11 @@ for more info about how Catalyst dispatches to actions.
 
 #I think both of these could be attributes. doesn't really seem like they need
 #to ble class data. i think that attributes +default would work just fine
-__PACKAGE__->mk_classdata($_) for qw/_dispatch_steps/;
+__PACKAGE__->mk_classdata($_) for qw/_dispatch_steps _action_class/;
 
 __PACKAGE__->_dispatch_steps( [qw/_BEGIN _AUTO _ACTION/] );
+__PACKAGE__->_action_class('Catalyst::Action');
 
-has _action_class => (
-    is => 'rw',
-    default => 'Catalyst::Action',
-);
 
 sub _DISPATCH : Private {
     my ( $self, $c ) = @_;
@@ -228,7 +225,9 @@ sub register_action_methods {
 
     foreach my $method (@methods) {
         my $name = $method->name;
-        my $attributes = $method->attributes;
+        # Horrible hack! All method metaclasses should have an attributes
+        # method, core Moose bug - see r13354.
+        my $attributes = $method->can('attributes') ? $method->attributes : [];
         my $attrs = $self->_parse_attrs( $c, $name, @{ $attributes } );
         if ( $attrs->{Private} && ( keys %$attrs > 1 ) ) {
             $c->log->debug( 'Bad action definition "'
@@ -252,11 +251,13 @@ sub register_action_methods {
 }
 
 sub action_class {
-    my ($self, %args) = @_;
+    my $self = shift;
+    my %args = @_;
 
     my $class = (exists $args{attributes}{ActionClass}
-                    ? $args{attributes}{ActionClass}[0]
-                    : $self->_action_class);
+        ? $args{attributes}{ActionClass}[0]
+        : $self->_action_class);
+
     Class::MOP::load_class($class);
     return $class;
 }
@@ -266,8 +267,8 @@ sub create_action {
     my %args = @_;
 
     my $class = $self->action_class(%args);
-
     my $action_args = $self->config->{action_args};
+
     my %extra_args = (
         %{ $action_args->{'*'}           || {} },
         %{ $action_args->{ $args{name} } || {} },
@@ -539,6 +540,11 @@ action methods for this package.
 Creates action objects for a set of action methods using C< create_action >,
 and registers them with the dispatcher.
 
+=head2 $self->action_class(%args)
+
+Used when a controller is creating an action to determine the correct base
+action class to use.  
+
 =head2 $self->create_action(%args)
 
 Called with a hash of data to be use for construction of a new