1 package MooseX::StrictConstructor;
7 $VERSION = eval $VERSION;
11 use Moose::Util::MetaRole;
12 use MooseX::StrictConstructor::Role::Object;
13 use MooseX::StrictConstructor::Role::Meta::Method::Constructor;
15 Moose::Exporter->setup_import_methods();
23 my $caller = $p{for_class};
25 Moose::Util::MetaRole::apply_metaclass_roles(
27 constructor_class_roles =>
28 ['MooseX::StrictConstructor::Role::Meta::Method::Constructor'],
31 Moose::Util::MetaRole::apply_base_class_roles(
34 ['MooseX::StrictConstructor::Role::Object'],
37 return $caller->meta();
48 MooseX::StrictConstructor - Make your object constructors blow up on unknown attributes
55 use MooseX::StrictConstructor;
61 # this blows up because color is not a known attribute
62 My::Class->new( size => 5, color => 'blue' );
66 Simply loading this module makes your constructors "strict". If your
67 constructor is called with an attribute init argument that your class
68 does not declare, then it calls "Carp::confess()". This is a great way
71 =head2 Subverting Strictness
73 You may find yourself wanting to have your constructor accept a
74 parameter which does not correspond to an attribute.
76 In that case, you'll probably also be writing a C<BUILD()> or
77 C<BUILDARGS()> method to deal with that parameter. In a C<BUILDARGS()>
78 method, you can simply make sure that this parameter is not included
79 in the hash reference you return. Otherwise, in a C<BUILD()> method,
80 you can delete it from the hash reference of parameters.
86 if ( delete $params->{do_something} ) {
93 Dave Rolsky, C<< <autarch@urth.org> >>
97 Please report any bugs or feature requests to
98 C<bug-moosex-strictconstructor@rt.cpan.org>, or through the web
99 interface at L<http://rt.cpan.org>. I will be notified, and then
100 you'll automatically be notified of progress on your bug as I make
103 =head1 COPYRIGHT & LICENSE
105 Copyright 2007-2008 Dave Rolsky, All Rights Reserved.
107 This program is free software; you can redistribute it and/or modify
108 it under the same terms as Perl itself.