improve wording - the bad code is actually _inline_slot_initializer
[gitmo/MooseX-UndefTolerant.git] / lib / MooseX / UndefTolerant.pm
index f5cac2b..ccb6f33 100644 (file)
@@ -1,5 +1,8 @@
 package MooseX::UndefTolerant;
 
+use strict;
+use warnings;
+
 use Moose qw();
 use Moose::Exporter;
 
@@ -8,18 +11,38 @@ use MooseX::UndefTolerant::Class;
 use MooseX::UndefTolerant::Constructor;
 
 
-my %metaroles = ( attribute => [ 'MooseX::UndefTolerant::Attribute' ] );
+my %metaroles = (
+    class_metaroles => {
+        attribute => [ 'MooseX::UndefTolerant::Attribute' ],
+    }
+);
 if ( $Moose::VERSION < 1.9900 ) {
-        $metaroles{constructor} = [ 'MooseX::UndefTolerant::Constructor' ];
+    $metaroles{class_metaroles}{constructor} = [
+        'MooseX::UndefTolerant::Constructor',
+    ];
 }
 else {
-        $metaroles{class} = [ 'MooseX::UndefTolerant::Class' ];
+    $metaroles{class_metaroles}{class} = [
+        'MooseX::UndefTolerant::Class',
+    ];
+    $metaroles{role_metaroles} = {
+        applied_attribute => [
+            'MooseX::UndefTolerant::Attribute',
+        ],
+        role => [
+            'MooseX::UndefTolerant::Role',
+        ],
+        application_to_class => [
+            'MooseX::UndefTolerant::ApplicationToClass',
+        ],
+        application_to_role => [
+            'MooseX::UndefTolerant::ApplicationToRole',
+        ],
+    };
 }
 
 
-Moose::Exporter->setup_import_methods(
-    class_metaroles => \%metaroles,
-);
+Moose::Exporter->setup_import_methods(%metaroles);
 
 1;
 
@@ -75,6 +98,9 @@ that accepts undef values (for example C<Maybe> types), as it is presumed that
 since the type is already "undef tolerant", there is no need to avoid
 initializing the attribute value with C<undef>.
 
+As of Moose 1.9900, this module can also be used in a role, in which case all
+of that role's attributes will be undef-tolerant.
+
 =head1 MOTIVATION
 
 I often found myself in this quandry:
@@ -103,8 +129,8 @@ real solution was:
     $class = My:Class->new(bar => 123);
   }
 
-Or some type of codemulch using ternarys.  This module allows you to make
-your attributes more tolerant of undef so that you can keep the first
+Or some type of codemulch using ternary conditionals.  This module allows you
+to make your attributes more tolerant of undef so that you can keep the first
 example: have your cake and eat it too!
 
 =head1 PER ATTRIBUTE
@@ -116,8 +142,8 @@ See L<MooseX::UndefTolerant::Attribute>.
 This extension does not currently work in immutable classes when applying the
 trait to some (but not all) attributes in the class. This is because the
 inlined constructor initialization code currently lives in
-L<Moose::Meta::Method::Constructor>, not L<Moose::Meta::Attribute>. The good
-news is that this is expected to be changing shortly.
+L<Moose::Meta::Class>, not L<Moose::Meta::Attribute>. The good news is that
+this is expected to be changing shortly.
 
 =head1 ACKNOWLEDGEMENTS