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

autarch at dev.catalyst.perl.org autarch at dev.catalyst.perl.org
Tue Apr 28 22:46:51 GMT 2009


Author: autarch
Date: 2009-04-28 23:46:51 +0100 (Tue, 28 Apr 2009)
New Revision: 9929

Modified:
   Catalyst-Runtime/5.80/trunk/lib/Catalyst.pm
   Catalyst-Runtime/5.80/trunk/t/plugin_new_method_backcompat.t
Log:
If a class makes itself immutable and turns off constructor inlining, die with an error telling them to turn on replace_constructor => 1

Modified: Catalyst-Runtime/5.80/trunk/lib/Catalyst.pm
===================================================================
--- Catalyst-Runtime/5.80/trunk/lib/Catalyst.pm	2009-04-28 21:56:07 UTC (rev 9928)
+++ Catalyst-Runtime/5.80/trunk/lib/Catalyst.pm	2009-04-28 22:46:51 UTC (rev 9929)
@@ -1101,6 +1101,12 @@
     # applying modifiers).
     Scope::Upper::reap(sub {
         my $meta = Class::MOP::get_metaclass_by_name($class);
+        if ( $meta->is_immutable && ! { $meta->immutable_options }->{inline_constructor} ) {
+            die "You made your application class ($class) immutable, "
+                . "but did not inline the constructor.\n"
+                . "This will break catalyst, please pass "
+                . "(replace_constructor => 1) when making your class immutable.\n";
+        }
         $meta->make_immutable(replace_constructor => 1) unless $meta->is_immutable;
     }, Scope::Upper::SCOPE(1));
 

Modified: Catalyst-Runtime/5.80/trunk/t/plugin_new_method_backcompat.t
===================================================================
--- Catalyst-Runtime/5.80/trunk/t/plugin_new_method_backcompat.t	2009-04-28 21:56:07 UTC (rev 9928)
+++ Catalyst-Runtime/5.80/trunk/t/plugin_new_method_backcompat.t	2009-04-28 22:46:51 UTC (rev 9929)
@@ -8,7 +8,8 @@
 # that plugins don't get it wrong for us.
 
 # Also tests method modifiers and etc in MyApp.pm still work as expected.
-use Test::More tests => 3;
+use Test::More tests => 4;
+use Test::Exception;
 
 {
     package NewTestPlugin;
@@ -50,3 +51,15 @@
 use Catalyst::Test qw/TestAppPluginWithNewMethod/;
 ok request('/foo')->is_success; 
 is $TestAppPluginWithNewMethod::MODIFIER_FIRED, 1, 'Before modifier was fired correctly.';
+
+throws_ok {
+    package TestAppBadlyImmutable;
+    use Catalyst qw/+NewTestPlugin/;
+
+    TestAppBadlyImmutable->setup;
+
+    __PACKAGE__->meta->make_immutable( inline_constructor => 0 );
+}
+    qr/\QYou made your application class (TestAppBadlyImmutable) immutable/,
+    'An application class that is already immutable but does not inline the constructor dies at ->setup';
+




More information about the Catalyst-commits mailing list