[Catalyst-commits] r7522 - in Catalyst-Runtime/5.80/branches/moose: lib lib/Catalyst t

groditi at dev.catalyst.perl.org groditi at dev.catalyst.perl.org
Tue Mar 25 22:36:01 GMT 2008


Author: groditi
Date: 2008-03-25 22:36:01 +0000 (Tue, 25 Mar 2008)
New Revision: 7522

Modified:
   Catalyst-Runtime/5.80/branches/moose/lib/Catalyst.pm
   Catalyst-Runtime/5.80/branches/moose/lib/Catalyst/Controller.pm
   Catalyst-Runtime/5.80/branches/moose/lib/Catalyst/Dispatcher.pm
   Catalyst-Runtime/5.80/branches/moose/t/c3_mro.t
Log:
passing a lot more tests. still alot of work to be done. extends keyword dies on Controller.pm need to get rid of NEXT and convert a lot of the syntax over for clarity. i think the controller path / namespace changes pass the tests, but i do not trust them to be DTRT. need to investigate further.

Modified: Catalyst-Runtime/5.80/branches/moose/lib/Catalyst/Controller.pm
===================================================================
--- Catalyst-Runtime/5.80/branches/moose/lib/Catalyst/Controller.pm	2008-03-25 19:11:29 UTC (rev 7521)
+++ Catalyst-Runtime/5.80/branches/moose/lib/Catalyst/Controller.pm	2008-03-25 22:36:01 UTC (rev 7522)
@@ -1,8 +1,27 @@
 package Catalyst::Controller;
 
-use strict;
+use Moose;
 use base qw/Catalyst::Component Catalyst::AttrContainer/;
 
+#Why does the following blow up?
+#extends qw/Catalyst::Component Catalyst::AttrContainer/;
+
+has path => (
+             is => 'ro',
+             isa => 'Str',
+             predicate => 'has_path',
+            );
+
+#this are frefixed like this because _namespace clases with something in
+#Catalyst.pm . to be fixed later.
+has _namespace => (
+                   is => 'ro',
+                   isa => 'Str',
+                   init_arg => 'namespace',
+                   predicate => '_has_namespace',
+                 );
+
+use Scalar::Util qw/blessed/;
 use Catalyst::Exception;
 use Catalyst::Utils;
 use Class::Inspector;
@@ -39,7 +58,9 @@
 __PACKAGE__->mk_accessors( qw/_application/ );
 
 ### _app as alias
-*_app = *_application;
+sub _app{ shift->_application }
+#for now.
+#*_app = *_application;
 
 sub _DISPATCH : Private {
     my ( $self, $c ) = @_;
@@ -88,13 +109,14 @@
     return !@{ $c->error };
 }
 
-sub new {
+around new => sub {
+    my $orig = shift;
     my $self = shift;
     my $app = $_[0];
-    my $new = $self->NEXT::new(@_);
+    my $new = $self->$orig(@_);
     $new->_application( $app );
     return $new;
-}
+};
 
 
 sub action_for {
@@ -108,8 +130,11 @@
     unless ( $c ) {
         $c = ($self->isa('Catalyst') ? $self : $self->_application);
     }
-    my $hash = (ref $self ? $self : $self->config); # hate app-is-class
-    return $hash->{namespace} if exists $hash->{namespace};
+    if( ref($self) ){
+      return $self->_namespace if $self->_has_namespace;
+    } # else {
+      return $self->config->{namespace} if exists $self->config->{namespace};
+    #}
     return Catalyst::Utils::class2prefix( ref($self) || $self,
         $c->config->{case_sensitive} )
       || '';
@@ -120,8 +145,11 @@
     unless ( $c ) {
         $c = ($self->isa('Catalyst') ? $self : $self->_application);
     }
-    my $hash = (ref $self ? $self : $self->config); # hate app-is-class
-    return $hash->{path} if exists $hash->{path};
+    if( ref($self) ){
+      return $self->path if $self->has_path;
+    } # else {
+      return $self->config->{path} if exists $self->config->{path};
+    #}
     return shift->action_namespace(@_);
 }
 
@@ -129,12 +157,21 @@
 sub register_actions {
     my ( $self, $c ) = @_;
     my $class = ref $self || $self;
+    #this is still not correct for some reason.
     my $namespace = $self->action_namespace($c);
     my %methods;
-    $methods{ $self->can($_) } = $_
-      for @{ Class::Inspector->methods($class) || [] };
+    if( $self->can('meta') ){
+      my $meta = $self->meta;
+      %methods = map{ $_->{code}->body => $_->{name} }
+        grep {$_->{class} ne 'Moose::Object'}
+          $meta->compute_all_applicable_methods;
+    } else { #until we are sure there's no moose stuff left...
+      $methods{ $self->can($_) } = $_
+        for @{ Class::Inspector->methods($class) || [] };
+    }
 
     # Advanced inheritance support for plugins and the like
+    #to be modified to use meta->superclasses
     my @action_cache;
     {
         no strict 'refs';
@@ -156,7 +193,7 @@
               if $c->debug;
             next;
         }
-        my $reverse = $namespace ? "$namespace/$method" : $method;
+        my $reverse = $namespace ? "${namespace}/${method}" : $method;
         my $action = $self->create_action(
             name       => $method,
             code       => $code,
@@ -204,7 +241,9 @@
         }
     }
 
-    my $hash = (ref $self ? $self : $self->config); # hate app-is-class
+    #this will not work under moose
+    #my $hash = (ref $self ? $self : $self->config); # hate app-is-class
+    my $hash = $self->config;
 
     if (exists $hash->{actions} || exists $hash->{action}) {
       my $a = $hash->{actions} || $hash->{action};

Modified: Catalyst-Runtime/5.80/branches/moose/lib/Catalyst/Dispatcher.pm
===================================================================
--- Catalyst-Runtime/5.80/branches/moose/lib/Catalyst/Dispatcher.pm	2008-03-25 19:11:29 UTC (rev 7521)
+++ Catalyst-Runtime/5.80/branches/moose/lib/Catalyst/Dispatcher.pm	2008-03-25 22:36:01 UTC (rev 7522)
@@ -15,7 +15,7 @@
 use Scalar::Util ();
 
 # Stringify to class
-use overload '""' => sub { return ref shift }, fallback => 1;
+use overload '""' => sub { return ref(shift) }, fallback => 1;
 
 
 # Preload these action types
@@ -396,6 +396,7 @@
         my $class = "Catalyst::DispatchType::$key";
         unless ( $registered->{$class} ) {
             #eval "require $class";
+            #some error checking rethrowing here wouldn't hurt.
             eval { Class::MOP::load_class($class) };
             push( @{ $self->_dispatch_types }, $class->new ) unless $@;
             $registered->{$class} = 1;

Modified: Catalyst-Runtime/5.80/branches/moose/lib/Catalyst.pm
===================================================================
--- Catalyst-Runtime/5.80/branches/moose/lib/Catalyst.pm	2008-03-25 19:11:29 UTC (rev 7521)
+++ Catalyst-Runtime/5.80/branches/moose/lib/Catalyst.pm	2008-03-25 22:36:01 UTC (rev 7522)
@@ -78,7 +78,12 @@
 
     unless ( $caller->isa('Catalyst') ) {
         no strict 'refs';
-        push @{"$caller\::ISA"}, $class, 'Catalyst::Controller';
+        if( $caller->can('meta') ){
+          my @superclasses = ($caller->meta->superclasses, $class, 'Catalyst::Controller');
+          $caller->meta->superclasses(@superclasses);
+        } else {
+          push @{"$caller\::ISA"}, $class, 'Catalyst::Controller';
+        }
     }
 
     $caller->arguments( [@arguments] );
@@ -677,14 +682,15 @@
 
 =cut
 
-sub config {
+around config => sub {
+    my $orig = shift;
     my $c = shift;
 
     $c->log->warn("Setting config after setup has been run is not a good idea.")
       if ( @_ and $c->setup_finished );
 
-    $c->NEXT::config(@_);
-}
+    $c->$orig(@_);
+};
 
 =head2 $c->log
 
@@ -1875,7 +1881,8 @@
         # Model::DBI::Schema sub-classes are loaded - if it's in @comps
         # we know M::P::O found a file on disk so this is safe
 
-        Catalyst::Utils::ensure_class_loaded( $component, { ignore_loaded => 1 } );
+        #Catalyst::Utils::ensure_class_loaded( $component, { ignore_loaded => 1 } );
+        Class::MOP::load_class($component);
 
         my $module  = $class->setup_component( $component );
         my %modules = (
@@ -2180,7 +2187,12 @@
         $proto->_plugins->{$plugin} = 1;
         unless ($instant) {
             no strict 'refs';
-            unshift @{"$class\::ISA"}, $plugin;
+            if( $class->can('meta') ){
+              my @superclasses = ($plugin, $class->meta->superclasses );
+              $class->meta->superclasses(@superclasses);
+            } else {
+              unshift @{"$class\::ISA"}, $plugin;
+            }
         }
         return $class;
     }

Modified: Catalyst-Runtime/5.80/branches/moose/t/c3_mro.t
===================================================================
--- Catalyst-Runtime/5.80/branches/moose/t/c3_mro.t	2008-03-25 19:11:29 UTC (rev 7521)
+++ Catalyst-Runtime/5.80/branches/moose/t/c3_mro.t	2008-03-25 22:36:01 UTC (rev 7522)
@@ -13,7 +13,7 @@
 {
   local @INC = grep {/blib/} @INC;
   @cat_mods = (
-    'Catalyst', 
+    'Catalyst',
     Module::Pluggable::Object->new(search_path => ['Catalyst'])->plugins,
   );
 }




More information about the Catalyst-commits mailing list