X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMooseX-UndefTolerant.git;a=blobdiff_plain;f=lib%2FMooseX%2FUndefTolerant.pm;h=77445941a8002c9c41979e3c31ac1c1b16ca31ed;hp=f666558bbe946537f67ad623854eac16cfe38d81;hb=fff0a09d7aa2aaccf7ab93d2f5cb005ada59a1d9;hpb=7e9c113df7e76c2009e9c48f9d4d3ca6c18bc690 diff --git a/lib/MooseX/UndefTolerant.pm b/lib/MooseX/UndefTolerant.pm index f666558..7744594 100644 --- a/lib/MooseX/UndefTolerant.pm +++ b/lib/MooseX/UndefTolerant.pm @@ -7,28 +7,45 @@ use MooseX::UndefTolerant::Attribute; use MooseX::UndefTolerant::Class; use MooseX::UndefTolerant::Constructor; -our $VERSION = '0.09'; -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; -__END__ - -=head1 NAME +# ABSTRACT: Make your attribute(s) tolerant to undef initialization -MooseX::UndefTolerant - Make your attribute(s) tolerant to undef initialization +__END__ =head1 SYNOPSIS @@ -70,6 +87,14 @@ attributes tolerant of undef. If you specify the value of undef to any of 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 for details. + +There will be no change in behaviour to any attribute with a type constraint +that accepts undef values (for example C 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. + =head1 MOTIVATION I often found myself in this quandry: @@ -98,8 +123,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 @@ -114,10 +139,6 @@ inlined constructor initialization code currently lives in L, not L. The good news is that this is expected to be changing shortly. -=head1 AUTHOR - -Cory G Watson, C<< >> - =head1 ACKNOWLEDGEMENTS Many thanks to the crew in #moose who talked me through this module: @@ -134,14 +155,4 @@ Jay Shirley (jshirley) Mike Eldridge (diz) -=head1 COPYRIGHT & LICENSE - -Copyright 2009 Cory G Watson. - -This program is free software; you can redistribute it and/or modify it -under the terms of either: the GNU General Public License as published -by the Free Software Foundation; or the Artistic License. - -See http://dev.perl.org/licenses/ for more information. - =cut