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;
the attributes they will not be initialized, effectively behaving as if you
had not provided a value at all.
+You can also apply the 'UndefTolerant' trait to individual attributes. See
+L<MooseX::UndefTolerant::Attribute> for details.
+
+There will be no change in behaviour to any attribute with a type constraint
+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>.
+
=head1 MOTIVATION
I often found myself in this quandry:
$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