[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