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