[Catalyst-commits] r8998 - in Catalyst-Runtime/5.80/trunk: . lib/Catalyst t

t0m at dev.catalyst.perl.org t0m at dev.catalyst.perl.org
Sat Jan 3 13:30:18 GMT 2009


Author: t0m
Date: 2009-01-03 13:30:18 +0000 (Sat, 03 Jan 2009)
New Revision: 8998

Modified:
   Catalyst-Runtime/5.80/trunk/Changes
   Catalyst-Runtime/5.80/trunk/TODO
   Catalyst-Runtime/5.80/trunk/lib/Catalyst/ClassData.pm
   Catalyst-Runtime/5.80/trunk/t/cdi_backcompat_plugin_accessor_override.t
Log:
And fixes for the CDI issue, this is getting really yucky..

Modified: Catalyst-Runtime/5.80/trunk/Changes
===================================================================
--- Catalyst-Runtime/5.80/trunk/Changes	2009-01-03 13:18:33 UTC (rev 8997)
+++ Catalyst-Runtime/5.80/trunk/Changes	2009-01-03 13:30:18 UTC (rev 8998)
@@ -1,5 +1,7 @@
 # This file documents the revision history for Perl extension Catalyst.
 
+        - Fix plugins which hook onto setup_finished being called (t0m)
+          - Test for this (t0m)
         - Fix calling use Catalyst::Test 'MyApp' 'foo' which used to work,
           but stopped as the 2nd parameter can be an options hash now (t0m)
         - Bump Moose dependency to fix make_immutable bug (t0m)

Modified: Catalyst-Runtime/5.80/trunk/TODO
===================================================================
--- Catalyst-Runtime/5.80/trunk/TODO	2009-01-03 13:18:33 UTC (rev 8997)
+++ Catalyst-Runtime/5.80/trunk/TODO	2009-01-03 13:30:18 UTC (rev 8998)
@@ -37,9 +37,10 @@
        Catalyst::Dispatcher::_do_forward does not fix arguments if you throw
        an exception. Needs a test case (Caelum)
      
-     - Catalyst::Plugin::Authentication::Store::DBIC fails as
-       overriding the setup_finished class data method in a plugin no longer
-       works correctly (see t/cdi_backcompat_accessor_override.t).
+     - Catalyst::Plugin::Authentication::Store::DBIC relies on 
+       hooking the setup_finished class data method in a plugin
+       (see t/cdi_backcompat_accessor_override.t).
+       Is this insane / should we support this?
 
   - Issues with TWMC not being loaded when it used to be in 5.70 
     (Bill Moseley)

Modified: Catalyst-Runtime/5.80/trunk/lib/Catalyst/ClassData.pm
===================================================================
--- Catalyst-Runtime/5.80/trunk/lib/Catalyst/ClassData.pm	2009-01-03 13:18:33 UTC (rev 8997)
+++ Catalyst-Runtime/5.80/trunk/lib/Catalyst/ClassData.pm	2009-01-03 13:30:18 UTC (rev 8998)
@@ -14,8 +14,20 @@
   my $accessor =  sub {
     my $pkg = ref $_[0] || $_[0];
     my $meta = $pkg->Class::MOP::Object::meta();
-    if (@_ > 1){
+    if (@_ > 1) {
       $meta->namespace->{$attribute} = \$_[1];
+      no strict 'refs';
+      if (! *{"${pkg}::${attribute}"}{CODE} ) {
+        foreach my $super ( $meta->linearized_isa ) {
+          # If there is a code symbol for this class data in a parent class, but not in our 
+          # class then copy it into our package. This is evil.
+          my $parent_symbol = *{"${super}::${attribute}"}{CODE} ? \&{"${super}::${attribute}"} : undef;
+          if (defined $parent_symbol) {
+            *{"${pkg}::${attribute}"} = $parent_symbol;
+            last;
+          }
+        }      
+      }
       return $_[1];
     }
 
@@ -29,14 +41,6 @@
      return ${$v};
     } else {
       foreach my $super ( $meta->linearized_isa ) {
-        # If there is a code symbol for this attr in a parent class, 
-        # then copy it into our package. Is this the correct
-        # fix for C::D::I back-compat? (t0m)
-        my $parent_symbol = *{"${super}::${attribute}"}{CODE} ? \&{"${super}::${attribute}"} : undef;
-        # FIXME - this is over-enthusiastic?
-        if (defined $parent_symbol) {
-          *{"${pkg}::${attribute}"} = $parent_symbol;
-        }
         # tighter version of same after
         # my $super_meta = Moose::Meta::Class->initialize($super);
         my $v = ${"${super}::"}{$attribute} ? *{"${super}::${attribute}"}{SCALAR} : undef;

Modified: Catalyst-Runtime/5.80/trunk/t/cdi_backcompat_plugin_accessor_override.t
===================================================================
--- Catalyst-Runtime/5.80/trunk/t/cdi_backcompat_plugin_accessor_override.t	2009-01-03 13:18:33 UTC (rev 8997)
+++ Catalyst-Runtime/5.80/trunk/t/cdi_backcompat_plugin_accessor_override.t	2009-01-03 13:30:18 UTC (rev 8998)
@@ -30,9 +30,7 @@
 
 # And the plugin's setup_finished method should have been run, as accessors
 # are not created in MyApp until the data is written to.
-TODO: {
-    local $TODO = "Copying the class data accessor down into MyApp other than at runtime\n" .
-    " when assigned (as pre exact CDI behavior) causes methods to not get run";
+{
     no warnings 'once';
     is $CDICompatTestPlugin::Data::HAS_RUN_SETUP_FINISHED, 1, 'Plugin setup_finish run';
 }




More information about the Catalyst-commits mailing list