1 package MooseX::StrictConstructor;
8 use Moose::Util::MetaRole;
10 use MooseX::StrictConstructor::Trait::Class;
11 use MooseX::StrictConstructor::Trait::Method::Constructor;;
14 class => ['MooseX::StrictConstructor::Trait::Class'],
17 $metaroles{constructor}
18 = ['MooseX::StrictConstructor::Trait::Method::Constructor']
19 if $Moose::VERSION <= 1.9900;
21 Moose::Exporter->setup_import_methods( class_metaroles => \%metaroles );
25 # ABSTRACT: Make your object constructors blow up on unknown attributes
36 use MooseX::StrictConstructor;
42 # this blows up because color is not a known attribute
43 My::Class->new( size => 5, color => 'blue' );
47 Simply loading this module makes your constructors "strict". If your
48 constructor is called with an attribute init argument that your class does not
49 declare, then it calls C<< Moose->throw_error() >>. This is a great way to
52 =head2 Subverting Strictness
54 You may find yourself wanting to have your constructor accept a
55 parameter which does not correspond to an attribute.
57 In that case, you'll probably also be writing a C<BUILD()> or
58 C<BUILDARGS()> method to deal with that parameter. In a C<BUILDARGS()>
59 method, you can simply make sure that this parameter is not included
60 in the hash reference you return. Otherwise, in a C<BUILD()> method,
61 you can delete it from the hash reference of parameters.
67 if ( delete $params->{do_something} ) {
74 Please report any bugs or feature requests to
75 C<bug-moosex-strictconstructor@rt.cpan.org>, or through the web
76 interface at L<http://rt.cpan.org>. I will be notified, and then
77 you'll automatically be notified of progress on your bug as I make