let us use CCAR instead of doing our own thing
John Napiorkowski [Tue, 10 Aug 2010 15:31:30 +0000 (11:31 -0400)]
lib/CatalystX/Declare/Controller/ActionPreparation.pm
lib/CatalystX/Declare/Keyword/Controller.pm

index 5eefe36..66052fe 100644 (file)
@@ -5,17 +5,6 @@ role CatalystX::Declare::Controller::ActionPreparation {
     use aliased 'CatalystX::Declare::Action::CatchValidationError';
     use aliased 'CatalystX::Declare::Dispatching::ChainTypeSensitivity';
 
-
-    method _apply_action_roles (Object $action, @roles) {
-
-        for my $role (CatchValidationError, @roles) {
-            my $fq_role = $self->_qualify_class_name(ActionRole => $role);
-
-            Class::MOP::load_class($fq_role);
-            $fq_role->meta->apply($action);
-        }
-    }
-
     method _find_method_type_constraint (Str $name) {
 
         $self->meta->find_method_type_constraint($name)
@@ -63,17 +52,19 @@ role CatalystX::Declare::Controller::ActionPreparation {
         $self->_ensure_applied_dispatchtype_roles;
     }
 
-    around create_action (%args) {
-
-        my @action_roles = @{ delete($args{attributes}{CatalystX_Declarative_ActionRoles}) || [] };
+    around gather_action_roles(%args) {
+        return (
+            $self->$orig(%args),
+            @{ delete($args{attributes}{CatalystX_Declarative_ActionRoles}) || [] },
+        );
+    }
 
+    around create_action (%args) {
         my $action = $self->$orig(%args);
 
         return $action
             if $args{attributes}{Private};
 
-        $self->_apply_action_roles($action, @action_roles);
-
         return $action 
             unless $action->DOES(CatchValidationError);
 
index d625dab..73054fe 100644 (file)
@@ -35,7 +35,7 @@ class CatalystX::Declare::Keyword::Controller
         );
     }
 
-    method default_superclasses { 'Catalyst::Controller' }
+    method default_superclasses { 'Catalyst::Controller::ActionRole' }
 
     method auto_make_immutable { 0 }