[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