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_metaroles(
29 'MooseX::StrictConstructor::Role::Meta::Method::Constructor']
33 Moose::Util::MetaRole::apply_base_class_roles(
36 ['MooseX::StrictConstructor::Role::Object'],
39 return $caller->meta();
50 MooseX::StrictConstructor - Make your object constructors blow up on unknown attributes
57 use MooseX::StrictConstructor;
63 # this blows up because color is not a known attribute
64 My::Class->new( size => 5, color => 'blue' );
68 Simply loading this module makes your constructors "strict". If your
69 constructor is called with an attribute init argument that your class
70 does not declare, then it calls "Carp::confess()". This is a great way
73 =head2 Subverting Strictness
75 You may find yourself wanting to have your constructor accept a
76 parameter which does not correspond to an attribute.
78 In that case, you'll probably also be writing a C<BUILD()> or
79 C<BUILDARGS()> method to deal with that parameter. In a C<BUILDARGS()>
80 method, you can simply make sure that this parameter is not included
81 in the hash reference you return. Otherwise, in a C<BUILD()> method,
82 you can delete it from the hash reference of parameters.
88 if ( delete $params->{do_something} ) {
95 Dave Rolsky, C<< <autarch@urth.org> >>
99 Please report any bugs or feature requests to
100 C<bug-moosex-strictconstructor@rt.cpan.org>, or through the web
101 interface at L<http://rt.cpan.org>. I will be notified, and then
102 you'll automatically be notified of progress on your bug as I make
105 =head1 COPYRIGHT & LICENSE
107 Copyright 2007-2008 Dave Rolsky, All Rights Reserved.
109 This program is free software; you can redistribute it and/or modify
110 it under the same terms as Perl itself.