search spec components factored out of T365
[catagits/Reaction.git] / lib / Reaction / Class.pm
index b2c0ad9..a57dcdf 100644 (file)
@@ -3,12 +3,13 @@ package Reaction::Class;
 use Moose qw(confess);
 use Sub::Exporter ();
 use Sub::Name ();
-use Reaction::Types::Core;
+use Reaction::Types::Core ':all';
 use Reaction::Object;
 
 sub exporter_for_package {
   my ($self, $package) = @_;
   my %exports_proto = $self->exports_for_package($package);
+  no warnings 'uninitialized'; # XXX fix this
   my %exports = (
     map { my $cr = $exports_proto{$_}; ($_, sub { Sub::Name::subname "${self}::$_" => $cr; }) }
     keys %exports_proto
@@ -120,7 +121,6 @@ sub do_class_sub {
   }
   if (@supers) {
     Class::MOP::load_class($_) for @supers;
-    $class->meta->_fix_metaclass_incompatability(@supers);
     $class->meta->superclasses(@supers);
   }
   $self->setup_and_cleanup($package, $setup);
@@ -129,7 +129,7 @@ sub do_class_sub {
   #print STDERR "$package \n";
   #print STDERR $package->meta->blessed, " \n";
   $package->meta->make_immutable;
-#      (inline_accessor    => 0, inline_destructor  => 0,inline_constructor => 0,);
+  #    (inline_accessor    => 0, inline_destructor  => 0,inline_constructor => 0,);
 }
 
 sub setup_and_cleanup {
@@ -146,15 +146,20 @@ sub setup_and_cleanup {
         shift if $_[0] eq 'as';
         push(@methods, [ $name, shift ]);
       };
+    my $s = $setup;
     foreach my $meth ($self->delayed_methods) {
       $save_delayed{$meth} = $package->can($meth);
-      local *{"${package}::${meth}"} =
-        Sub::Name::subname "${self}::${meth}" => sub {
-          push(@apply_after, [ $meth => @_ ]);
-        };
+      my $s_copy = $s;
+      $s = sub {
+        local *{"${package}::${meth}"} =
+          Sub::Name::subname "${self}::${meth}" => sub {
+            push(@apply_after, [ $meth => @_ ]);
+          };
+        $s_copy->(@_);
+      };
     }
     # XXX - need additional fuckery to handle multi-class-per-file
-    $setup->(); # populate up the crap
+    $s->(); # populate up the crap
   }
   my %exports = $self->exports_for_package($package);
   {
@@ -167,7 +172,7 @@ sub setup_and_cleanup {
   eval "package ${package}; no $unimport_class;";
   confess "$unimport_class unimport from ${package} failed: $@" if $@;
   foreach my $m (@methods) {
-    $package->meta->add_method(@$m);
+    $self->add_method_to_target($package, $m);
   }
   foreach my $a (@apply_after) {
     my $call = shift(@$a);
@@ -175,6 +180,11 @@ sub setup_and_cleanup {
   }
 }
 
+sub add_method_to_target {
+  my ($self, $target, $method) = @_;
+  $target->meta->add_method(@$method);
+}
+
 sub delayed_methods {
   return (qw/has with extends before after around override augment/);
 }
@@ -314,6 +324,22 @@ Only valid whithin a class block, allows you to declare a method for the class.
 
 =item * Andres N. Kievsky (Documentation)
 
+=item * Robert Sedlacek (Documentation)
+
+=back
+
+=head1 SPONSORS
+
+=over
+
+=item * Ionzero
+
+L<Ionzero|http://www.ionzero.com/> sponsored the writing of the 
+L<Reaction::Manual::Tutorial>, L<Reaction::Manual::Overview> and
+L<Reaction::Manual::Widgets> documentations as well as improvements
+to L<Reaction::Manual::Intro> and many API documentation improvements
+throughout the project.
+
 =back
 
 =head1 LICENSE