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=f14e4c452bfdff08877bf08356094874472f67cf;hp=3be669ac571eb61f6eab51c1fecf038a93cbab4e;hb=1a9d90ea66c704b902eda8d4c26d1262cc716abd;hpb=32726d885ed56a2628ec0eccf18b2e898d1ca8ca diff --git a/lib/MooseX/StrictConstructor.pm b/lib/MooseX/StrictConstructor.pm index 3be669a..f14e4c4 100644 --- a/lib/MooseX/StrictConstructor.pm +++ b/lib/MooseX/StrictConstructor.pm @@ -3,69 +3,78 @@ package MooseX::StrictConstructor; use strict; use warnings; -our $VERSION = '0.01'; +use Moose 0.94 (); +use Moose::Exporter; +use Moose::Util::MetaRole; -use Moose; -use MooseX::Object::StrictConstructor; +use MooseX::StrictConstructor::Trait::Class; +use MooseX::StrictConstructor::Trait::Method::Constructor;; +my %metaroles = ( + class => ['MooseX::StrictConstructor::Trait::Class'], +); -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; -} - +$metaroles{constructor} + = ['MooseX::StrictConstructor::Trait::Method::Constructor'] + if $Moose::VERSION <= 1.9900; +Moose::Exporter->setup_import_methods( class_metaroles => \%metaroles ); 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 C<< Moose->throw_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