implemented action dispatching by type
[catagits/CatalystX-Declare.git] / lib / CatalystX / Declare / Keyword / Controller.pm
index 84fd8f7..8d8aaca 100644 (file)
@@ -1,13 +1,14 @@
 use MooseX::Declare;
+use Catalyst::Controller;
 
 class CatalystX::Declare::Keyword::Controller
     extends CatalystX::Declare::Keyword::Component {
 
     use MooseX::MethodAttributes ();
     use aliased 'CatalystX::Declare::Keyword::Action', 'ActionKeyword';
-    use aliased 'CatalystX::Declare::Controller::RegisterActionRoles';
     use aliased 'CatalystX::Declare::Controller::DetermineActionClass';
     use aliased 'CatalystX::Declare::Controller::Meta::TypeConstraintMapping';
+    use aliased 'CatalystX::Declare::Controller::ActionPreparation';
 
     use Data::Dump qw( pp );
 
@@ -21,9 +22,15 @@ class CatalystX::Declare::Keyword::Controller
                 sprintf('Class::MOP::load_class(q(%s))', TypeConstraintMapping),
                 sprintf('%s->meta->apply(%s->meta->meta)', TypeConstraintMapping, $package),
             ],
+        );
+    }
+
+    after add_extends_option_customizations (Object $ctx, Str $package, $superclasses, $options) {
+
+        $ctx->add_scope_code_parts(
             sprintf('with qw( %s )', join ' ',
-                RegisterActionRoles,
                 DetermineActionClass,
+                ActionPreparation,
             ),
         );
     }
@@ -32,7 +39,7 @@ class CatalystX::Declare::Keyword::Controller
 
     method auto_make_immutable { 0 }
 
-    around default_inner () {
+    around default_inner {
 
         my @modifiers = qw( ); 
 
@@ -46,11 +53,13 @@ class CatalystX::Declare::Keyword::Controller
 
     method add_with_option_customizations (Object $ctx, $package, ArrayRef $roles, HashRef $options) {
 
+        $package = $ctx->qualify_namespace($package);
+
         $ctx->add_cleanup_code_parts(
             map {
                 sprintf('Class::MOP::load_class(%s)', pp "$_"),
                 sprintf('%s->meta->apply(%s->meta)', $_, $package),
-            } @$roles
+            } map { $ctx->qualify_namespace($_) } @$roles
         );
 
         $ctx->add_cleanup_code_parts(
@@ -123,7 +132,7 @@ developing L<CatalystX::Declare>, you should not be concerned with them.
 
 This method modifier will initialise the controller with 
 L<MooseX::MethodAttributes> and add the 
-L<CatalystX::Declare::Controller::RegisterActionRoles> and
+L<CatalystX::Declare::Controller::ActionPreparation> and
 L<CatalystX::Declare::Controller::DetermineActionClass> controller roles
 before calling the original.