When inlining with Moose 2.0+, close over hash of allowed attrs rather than regenerat...
[gitmo/MooseX-StrictConstructor.git] / lib / MooseX / StrictConstructor.pm
CommitLineData
32726d88 1package MooseX::StrictConstructor;
2
3use strict;
4use warnings;
5
2c33a849 6use Moose 0.94 ();
0cdff431 7use Moose::Exporter;
fbfaa61f 8use Moose::Util::MetaRole;
7815dbf4 9
bb64c045 10use MooseX::StrictConstructor::Trait::Class;
11use MooseX::StrictConstructor::Trait::Method::Constructor;;
12
13Moose::Exporter->setup_import_methods(
14 class_metaroles => {
15 class => ['MooseX::StrictConstructor::Trait::Class'],
16 constructor =>
17 ['MooseX::StrictConstructor::Trait::Method::Constructor'],
18 },
19);
32726d88 20
32726d88 211;
22
5b66b6d4 23# ABSTRACT: Make your object constructors blow up on unknown attributes
24
32726d88 25__END__
26
27=pod
28
32726d88 29=head1 SYNOPSIS
30
2ffa7b60 31 package My::Class;
32726d88 32
f2f2a5dc 33 use Moose;
34 use MooseX::StrictConstructor;
32726d88 35
2ffa7b60 36 has 'size' => ...;
32726d88 37
2ffa7b60 38 # then later ...
39
40 # this blows up because color is not a known attribute
41 My::Class->new( size => 5, color => 'blue' );
32726d88 42
43=head1 DESCRIPTION
44
f2f2a5dc 45Simply loading this module makes your constructors "strict". If your
46constructor is called with an attribute init argument that your class
714128ef 47does not declare, then it calls C<Moose->throw_error()>. This is a great way
f2f2a5dc 48to catch small typos.
2ffa7b60 49
50=head2 Subverting Strictness
51
fbfaa61f 52You may find yourself wanting to have your constructor accept a
53parameter which does not correspond to an attribute.
2ffa7b60 54
fbfaa61f 55In that case, you'll probably also be writing a C<BUILD()> or
56C<BUILDARGS()> method to deal with that parameter. In a C<BUILDARGS()>
57method, you can simply make sure that this parameter is not included
58in the hash reference you return. Otherwise, in a C<BUILD()> method,
59you can delete it from the hash reference of parameters.
2ffa7b60 60
61 sub BUILD {
62 my $self = shift;
63 my $params = shift;
32726d88 64
2ffa7b60 65 if ( delete $params->{do_something} ) {
66 ...
67 }
68 }
32726d88 69
32726d88 70=head1 BUGS
71
2ffa7b60 72Please report any bugs or feature requests to
73C<bug-moosex-strictconstructor@rt.cpan.org>, or through the web
74interface at L<http://rt.cpan.org>. I will be notified, and then
75you'll automatically be notified of progress on your bug as I make
76changes.
32726d88 77
32726d88 78=cut