bump version and deps for 0.07
[gitmo/MooseX-StrictConstructor.git] / lib / MooseX / StrictConstructor.pm
index 133bf96..1f58bb1 100644 (file)
@@ -3,16 +3,18 @@ package MooseX::StrictConstructor;
 use strict;
 use warnings;
 
-our $VERSION = '0.06_01';
-eval $VERSION = $VERSION;
+our $VERSION = '0.07';
+$VERSION = eval $VERSION;
 
 use Class::MOP ();
-use Moose ();
+use Moose 0.56 ();
 use Moose::Exporter;
+use Moose::Util::MetaRole;
 use MooseX::StrictConstructor::Role::Object;
-use MooseX::StrictConstructor::Role::Metaclass;
+use MooseX::StrictConstructor::Role::Meta::Method::Constructor;
 
-Moose::Exporter->setup_import_methods( also => 'Moose' );
+
+Moose::Exporter->setup_import_methods();
 
 sub init_meta
 {
@@ -23,33 +25,17 @@ sub init_meta
 
     my $caller = $p{for_class};
 
-    my $metameta = $caller->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);
-    }
-
-    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() );
-    }
+    Moose::Util::MetaRole::apply_metaclass_roles
+        ( for_class => $caller,
+          constructor_class_roles =>
+          ['MooseX::StrictConstructor::Role::Meta::Method::Constructor'],
+        );
+
+    Moose::Util::MetaRole::apply_base_class_roles
+        ( for_class => $caller,
+          roles =>
+          [ 'MooseX::StrictConstructor::Role::Object' ],
+        );
 
     return $caller->meta();
 }
@@ -68,7 +54,8 @@ MooseX::StrictConstructor - Make your object constructors blow up on unknown att
 
     package My::Class;
 
-    use MooseX::StrictConstructor; # instead of use Moose
+    use Moose;
+    use MooseX::StrictConstructor;
 
     has 'size' => ...;
 
@@ -79,22 +66,21 @@ MooseX::StrictConstructor - Make your object constructors blow up on unknown att
 
 =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;
@@ -105,13 +91,6 @@ seen when this class does its checking.
       }
   }
 
-=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> >>
@@ -126,7 +105,7 @@ changes.
 
 =head1 COPYRIGHT & LICENSE
 
-Copyright 2007 Dave Rolsky, All Rights Reserved.
+Copyright 2007-2008 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.