use strict;
use warnings;
-our $VERSION = '0.06_01';
-$VERSION = eval $VERSION;
-
-use Class::MOP ();
-use Moose ();
+use Moose 0.94 ();
use Moose::Exporter;
+use Moose::Util::MetaRole;
use MooseX::StrictConstructor::Role::Object;
-use MooseX::StrictConstructor::Role::Metaclass;
-
-Moose::Exporter->setup_import_methods( also => 'Moose' );
-
-sub init_meta
-{
- shift;
- my %p = @_;
-
- Moose->init_meta(%p);
-
- my $caller = $p{for_class};
-
- my $old_meta = $caller->meta();
-
- my $metameta = $old_meta->meta();
- unless ( $metameta->can('does_role')
- && $metameta->does_role( 'MooseX::StrictConstructor::Role::Metaclass' ) )
- {
- my $new_meta =
- Moose::Meta::Class->create_anon_class
- ( superclasses => [ ref $caller->meta() ],
- roles => [ 'MooseX::StrictConstructor::Role::Metaclass' ],
- cache => 1,
- );
-
- Class::MOP::remove_metaclass_by_name($caller);
-
- $new_meta->name()->initialize( $caller,
- map { $_ => $old_meta->$_() }
- qw( attribute_metaclass
- method_metaclass
- instance_metaclass
- )
- );
- }
-
- unless ( $caller->meta()->does_role('MooseX::StrictConstructor::Role::Object') )
- {
- my $new_base =
- Moose::Meta::Class->create_anon_class
- ( superclasses => [ $caller->meta()->superclasses() ],
- roles => [ 'MooseX::StrictConstructor::Role::Object' ],
- cache => 1,
- );
-
- $caller->meta()->superclasses( $new_base->name() );
- }
-
- return $caller->meta();
-}
+use MooseX::StrictConstructor::Role::Meta::Method::Constructor;
+
+Moose::Exporter->setup_import_methods(
+ class_metaroles => {
+ constructor =>
+ ['MooseX::StrictConstructor::Role::Meta::Method::Constructor']
+ },
+ base_class_roles => ['MooseX::StrictConstructor::Role::Object'],
+);
1;
+# ABSTRACT: Make your object constructors blow up on unknown attributes
+
__END__
=pod
-=head1 NAME
-
-MooseX::StrictConstructor - Make your object constructors blow up on unknown attributes
-
=head1 SYNOPSIS
package My::Class;
- use MooseX::StrictConstructor; # instead of use Moose
+ use Moose;
+ use MooseX::StrictConstructor;
has 'size' => ...;
=head1 DESCRIPTION
-Using this class to load Moose instead of just loading using Moose
-itself makes your constructors "strict". If your constructor is called
-with an attribute init argument that your class does not declare, then
-it calls "Carp::confess()". This is a great way to catch small typos.
+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 "Carp::confess()". This is a great way
+to catch small typos.
=head2 Subverting Strictness
-You may find yourself wanting to accept a parameter to the constructor
-that is not the name of an attribute.
-
-In that case, you'll probably be writing a C<BUILD()> method to deal
-with it. Your C<BUILD()> method will receive two parameters, the new
-object, and a hash reference of parameters passed to the constructor.
+You may find yourself wanting to have your constructor accept a
+parameter which does not correspond to an attribute.
-If you delete keys from this hash reference, then they will not be
-seen when this class does its checking.
+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.
sub BUILD {
my $self = shift;
}
}
-=head2 Caveats
-
-Using this class replaces the default Moose meta class,
-C<Moose::Meta::Class>, with its own,
-C<MooseX::StrictConstructor::Meta::Class>. If you have your own meta
-class, this distro will probably not work for you.
-
-=head1 AUTHOR
-
-Dave Rolsky, C<< <autarch@urth.org> >>
-
=head1 BUGS
Please report any bugs or feature requests to
you'll automatically be notified of progress on your bug as I make
changes.
-=head1 COPYRIGHT & LICENSE
-
-Copyright 2007 Dave Rolsky, All Rights Reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
=cut