X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMooseX-StrictConstructor.git;a=blobdiff_plain;f=lib%2FMooseX%2FStrictConstructor.pm;h=b45c3f06f424ace1dd28a88df3ff070e88314023;hp=3be669ac571eb61f6eab51c1fecf038a93cbab4e;hb=bb64c0458ed377f9a5a7f4d4071dee8cf0821312;hpb=32726d885ed56a2628ec0eccf18b2e898d1ca8ca diff --git a/lib/MooseX/StrictConstructor.pm b/lib/MooseX/StrictConstructor.pm index 3be669a..b45c3f0 100644 --- a/lib/MooseX/StrictConstructor.pm +++ b/lib/MooseX/StrictConstructor.pm @@ -3,69 +3,76 @@ package MooseX::StrictConstructor; use strict; use warnings; -our $VERSION = '0.01'; - -use Moose; -use MooseX::Object::StrictConstructor; - - -sub import -{ - my $caller = caller(); - - return if $caller eq 'main'; - - Moose::init_meta( $caller, 'MooseX::Object::StrictConstructor', 'Moose::Meta::Class' ); - - Moose->import( { into => $caller } ); - - return; -} +use Moose 0.94 (); +use Moose::Exporter; +use Moose::Util::MetaRole; +use MooseX::StrictConstructor::Trait::Class; +use MooseX::StrictConstructor::Trait::Method::Constructor;; +Moose::Exporter->setup_import_methods( + class_metaroles => { + class => ['MooseX::StrictConstructor::Trait::Class'], + constructor => + ['MooseX::StrictConstructor::Trait::Method::Constructor'], + }, +); 1; +# ABSTRACT: Make your object constructors blow up on unknown attributes + __END__ =pod -=head1 NAME - -MooseX::StrictConstructor - The fantastic new MooseX::StrictConstructor! - =head1 SYNOPSIS -XXX - change this! + package My::Class; + use Moose; use MooseX::StrictConstructor; - my $foo = MooseX::StrictConstructor->new(); + has 'size' => ...; - ... + # then later ... -=head1 DESCRIPTION + # this blows up because color is not a known attribute + My::Class->new( size => 5, color => 'blue' ); -=head1 METHODS +=head1 DESCRIPTION -This class provides the following methods +Simply loading this module makes your constructors "strict". If your +constructor is called with an attribute init argument that your class +does not declare, then it calls Cthrow_error()>. This is a great way +to catch small typos. -=head1 AUTHOR +=head2 Subverting Strictness -Dave Rolsky, C<< >> +You may find yourself wanting to have your constructor accept a +parameter which does not correspond to an attribute. -=head1 BUGS +In that case, you'll probably also be writing a C or +C method to deal with that parameter. In a C +method, you can simply make sure that this parameter is not included +in the hash reference you return. Otherwise, in a C method, +you can delete it from the hash reference of parameters. -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. + sub BUILD { + my $self = shift; + my $params = shift; -=head1 COPYRIGHT & LICENSE + if ( delete $params->{do_something} ) { + ... + } + } -Copyright 2007 Dave Rolsky, All Rights Reserved. +=head1 BUGS -This program is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. +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. =cut