X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FStrictConstructor.pm;h=0e3714bae5d4be73a68c040402cb8fc5332e3280;hb=8bf2d7142f22ad4cda02a21ea8c064fdd130549f;hp=3be669ac571eb61f6eab51c1fecf038a93cbab4e;hpb=32726d885ed56a2628ec0eccf18b2e898d1ca8ca;p=gitmo%2FMooseX-StrictConstructor.git diff --git a/lib/MooseX/StrictConstructor.pm b/lib/MooseX/StrictConstructor.pm index 3be669a..0e3714b 100644 --- a/lib/MooseX/StrictConstructor.pm +++ b/lib/MooseX/StrictConstructor.pm @@ -3,7 +3,7 @@ package MooseX::StrictConstructor; use strict; use warnings; -our $VERSION = '0.01'; +our $VERSION = '0.06'; use Moose; use MooseX::Object::StrictConstructor; @@ -15,7 +15,10 @@ sub import return if $caller eq 'main'; - Moose::init_meta( $caller, 'MooseX::Object::StrictConstructor', 'Moose::Meta::Class' ); + Moose::init_meta( $caller, + 'MooseX::Object::StrictConstructor', + 'MooseX::StrictConstructor::Meta::Class', + ); Moose->import( { into => $caller } ); @@ -32,23 +35,55 @@ __END__ =head1 NAME -MooseX::StrictConstructor - The fantastic new MooseX::StrictConstructor! +MooseX::StrictConstructor - Make your object constructors blow up on unknown attributes =head1 SYNOPSIS -XXX - change this! + package My::Class; - use MooseX::StrictConstructor; + use MooseX::StrictConstructor; # instead of use Moose - my $foo = MooseX::StrictConstructor->new(); + has 'size' => ...; - ... + # then later ... + + # this blows up because color is not a known attribute + My::Class->new( size => 5, color => 'blue' ); =head1 DESCRIPTION -=head1 METHODS +Using this class to load Moose instead of just loading using Moose +itself makes your constructors "strict". If your constructor is called +with an attribute init argument that your class does not declare, then +it calls "Carp::confess()". This is a great way to catch small typos. + +=head2 Subverting Strictness + +You may find yourself wanting to accept a parameter to the constructor +that is not the name of an attribute. + +In that case, you'll probably be writing a C method to deal +with it. Your C method will receive two parameters, the new +object, and a hash reference of parameters passed to the constructor. + +If you delete keys from this hash reference, then they will not be +seen when this class does its checking. + + sub BUILD { + my $self = shift; + my $params = shift; + + if ( delete $params->{do_something} ) { + ... + } + } + +=head2 Caveats -This class provides the following methods +Using this class replaces the default Moose meta class, +C, with its own, +C. If you have your own meta +class, this distro will probably not work for you. =head1 AUTHOR @@ -56,10 +91,11 @@ Dave Rolsky, C<< >> =head1 BUGS -Please report any bugs or feature requests to C, -or through the web interface at L. I will be -notified, and then you'll automatically be notified of progress on -your bug as I make changes. +Please report any bugs or feature requests to +C, or through the web +interface at L. I will be notified, and then +you'll automatically be notified of progress on your bug as I make +changes. =head1 COPYRIGHT & LICENSE