a couple more details
[catagits/Catalyst-Runtime.git] / lib / Catalyst.pm
index 381a250..045f992 100644 (file)
@@ -1,9 +1,7 @@
 package Catalyst;
 
 use Moose;
-#use MooseX::ClassAttribute;
 extends 'Catalyst::Component';
-
 use bytes;
 use Catalyst::Exception;
 use Catalyst::Log;
@@ -32,15 +30,9 @@ use Carp qw/croak carp/;
 
 BEGIN { require 5.008001; }
 
-has counter   => ( is => 'rw');
-has request   => ( is => 'rw');
-has response  => ( is => 'rw');
-has state     => ( is => 'rw');
-has action    => ( is => 'rw');
-has stack     => ( is => 'rw');
-has namespace => ( is => 'rw');
-has stats     => ( is => 'rw');
-
+__PACKAGE__->mk_accessors(
+    qw/counter request response state action stack namespace stats stash/
+);
 
 attributes->import( __PACKAGE__, \&namespace, 'lvalue' );
 
@@ -60,19 +52,6 @@ our $START     = time;
 our $RECURSION = 1000;
 our $DETACH    = "catalyst_detach\n";
 
-# class_has components       => (is => 'rw');
-# class_has arguments        => (is => 'rw');
-# class_has dispatcher       => (is => 'rw');
-# class_has engine           => (is => 'rw');
-# class_has log              => (is => 'rw');
-# class_has dispatcher_class => (is => 'rw', required => 1, default => sub {'Catalyst::Dispatcher'});
-# class_has engine_class     => (is => 'rw', required => 1, default => sub {'Catalyst::Engine::CGI'});
-# class_has context_class    => (is => 'rw');
-# class_has request_class    => (is => 'rw', required => 1, default => sub {'Catalyst::Request'});
-# class_has response_class   => (is => 'rw', required => 1, default => sub {'Catalyst::Response'});
-# class_has stats_class      => (is => 'rw', required => 1, default => sub {'Catalyst::Stats'});
-# class_has setup_finished   => (is => 'rw');
-
 __PACKAGE__->mk_classdata($_)
   for qw/components arguments dispatcher engine log dispatcher_class
   engine_class context_class request_class response_class stats_class
@@ -99,10 +78,12 @@ sub import {
 
     unless ( $caller->isa('Catalyst') ) {
         no strict 'refs';
-        push @{"$caller\::ISA"}, $class, 'Catalyst::Controller';
-        #my $caller_meta = $caller->meta;
-        #my @isa = $caller_meta->superclasses;
-        #$caller_meta->superclasses(@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] );
@@ -378,17 +359,18 @@ Catalyst).
 
 =cut
 
-sub stash {
+around stash => sub {
+    my $orig = shift;
     my $c = shift;
     if (@_) {
         my $stash = @_ > 1 ? {@_} : $_[0];
         croak('stash takes a hash or hashref') unless ref $stash;
         foreach my $key ( keys %$stash ) {
-            $c->{stash}->{$key} = $stash->{$key};
+            $c->$orig()->{$key} = $stash->{$key};
         }
     }
-    return $c->{stash};
-}
+    return $c->$orig();
+};
 
 =head2 $c->error
 
@@ -786,7 +768,6 @@ sub plugin {
     $class->_register_plugin( $plugin, 1 );
 
     eval { $plugin->import };
-    #MooseX::ClassAttribute::process_class_attribute($class, $name => (is => 'rw'));
     $class->mk_classdata($name);
     my $obj;
     eval { $obj = $plugin->new(@args) };
@@ -1900,7 +1881,8 @@ sub setup_components {
         # 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 = (
@@ -2205,8 +2187,12 @@ the plugin name does not begin with C<Catalyst::Plugin::>.
         $proto->_plugins->{$plugin} = 1;
         unless ($instant) {
             no strict 'refs';
-            unshift @{"$class\::ISA"}, $plugin;
-            # $class->meta->superclasses($plugin, $class->meta->superclasses);
+            if( $class->can('meta') ){
+              my @superclasses = ($plugin, $class->meta->superclasses );
+              $class->meta->superclasses(@superclasses);
+            } else {
+              unshift @{"$class\::ISA"}, $plugin;
+            }
         }
         return $class;
     }