Deprecating calling Moose->init_meta directly
Dave Rolsky [Tue, 30 Aug 2011 05:34:27 +0000 (00:34 -0500)]
The hack is kind of gross but I think it can safely go away once it finds all
the culprits doing this.

lib/Moose.pm
lib/Moose/Deprecated.pm
lib/Moose/Exporter.pm
t/basics/deprecations.t

index f776e12..1defef9 100644 (file)
@@ -131,10 +131,16 @@ Moose::Exporter->setup_import_methods(
     ],
 );
 
+our $CALLED_VIA_EXPORT_HACK;
 sub init_meta {
     shift;
     my %args = @_;
 
+    Moose::Deprecated::deprecated(
+              'Calling Moose->init_meta directly has been deprecated.'
+            . ' Use Moose::Exporter and let it call init_meta for you' )
+        unless $CALLED_VIA_EXPORT_HACK;
+
     my $class = $args{for_class}
         or Moose->throw_error("Cannot call init_meta without specifying a for_class");
     my $base_class = $args{base_class} || 'Moose::Object';
index 1df1f05..e457778 100644 (file)
@@ -4,6 +4,7 @@ use strict;
 use warnings;
 
 use Package::DeprecationManager 0.07 -deprecations => {
+    'calling Moose->init_meta directly' => '2.0200',
     'optimized type constraint sub ref' => '2.0000',
     'default is for Native Trait'       => '1.14',
     'default default for Native Trait'  => '1.14',
index fad3c25..4bc5b2c 100644 (file)
@@ -418,6 +418,8 @@ sub _make_import_sub {
         strict->import;
         warnings->import;
 
+        local $Moose::CALLED_VIA_EXPORT_HACK = 1;
+
         my $did_init_meta;
         for my $c ( grep { $_->can('init_meta') } $class, @{$exports_from} ) {
 
index 2466f6f..bfbe93b 100644 (file)
@@ -172,5 +172,17 @@ use Test::Requires {
     );
 }
 
+{
+    package Pack4;
+
+}
+
+stderr_like {
+    Moose->init_meta( for_class => __PACKAGE__ );
+}
+qr/\QCalling Moose->init_meta directly has been deprecated/,
+    'deprecation warning when calling init_meta directly';
+
+
 done_testing;