use strict;
use warnings;
-our $VERSION = '0.01';
+use Moose 0.94 ();
+use Moose::Exporter;
+use Moose::Util::MetaRole;
-use Moose;
-use MooseX::Object::StrictConstructor;
+use MooseX::StrictConstructor::Trait::Class;
+use MooseX::StrictConstructor::Trait::Method::Constructor;;
+my %metaroles = (
+ class => ['MooseX::StrictConstructor::Trait::Class'],
+);
-sub import
-{
- my $caller = caller();
-
- return if $caller eq 'main';
-
- Moose::init_meta( $caller, 'MooseX::Object::StrictConstructor', 'Moose::Meta::Class' );
-
- Moose->import( { into => $caller } );
-
- return;
-}
-
+$metaroles{constructor}
+ = ['MooseX::StrictConstructor::Trait::Method::Constructor']
+ if $Moose::VERSION <= 1.9900;
+Moose::Exporter->setup_import_methods( class_metaroles => \%metaroles );
1;
+# ABSTRACT: Make your object constructors blow up on unknown attributes
+
__END__
=pod
-=head1 NAME
-
-MooseX::StrictConstructor - The fantastic new MooseX::StrictConstructor!
-
=head1 SYNOPSIS
-XXX - change this!
+ package My::Class;
+ use Moose;
use MooseX::StrictConstructor;
- my $foo = MooseX::StrictConstructor->new();
+ has 'size' => ...;
- ...
+ # then later ...
-=head1 DESCRIPTION
+ # this blows up because color is not a known attribute
+ My::Class->new( size => 5, color => 'blue' );
-=head1 METHODS
+=head1 DESCRIPTION
-This class provides the following methods
+Simply loading this module makes your constructors "strict". If your
+constructor is called with an attribute init argument that your class does not
+declare, then it calls C<< Moose->throw_error() >>. This is a great way to
+catch small typos.
-=head1 AUTHOR
+=head2 Subverting Strictness
-Dave Rolsky, C<< <autarch@urth.org> >>
+You may find yourself wanting to have your constructor accept a
+parameter which does not correspond to an attribute.
-=head1 BUGS
+In that case, you'll probably also be writing a C<BUILD()> or
+C<BUILDARGS()> method to deal with that parameter. In a C<BUILDARGS()>
+method, you can simply make sure that this parameter is not included
+in the hash reference you return. Otherwise, in a C<BUILD()> method,
+you can delete it from the hash reference of parameters.
-Please report any bugs or feature requests to C<bug-moosex-strictconstructor@rt.cpan.org>,
-or through the web interface at L<http://rt.cpan.org>. I will be
-notified, and then you'll automatically be notified of progress on
-your bug as I make changes.
+ sub BUILD {
+ my $self = shift;
+ my $params = shift;
-=head1 COPYRIGHT & LICENSE
+ if ( delete $params->{do_something} ) {
+ ...
+ }
+ }
-Copyright 2007 Dave Rolsky, All Rights Reserved.
+=head1 BUGS
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
+Please report any bugs or feature requests to
+C<bug-moosex-strictconstructor@rt.cpan.org>, or through the web
+interface at L<http://rt.cpan.org>. I will be notified, and then
+you'll automatically be notified of progress on your bug as I make
+changes.
=cut