merging the immutable branch into trunk
[gitmo/Class-MOP.git] / lib / metaclass.pm
index b09417e..e1bd16a 100644 (file)
@@ -7,18 +7,24 @@ use warnings;
 use Carp         'confess';
 use Scalar::Util 'blessed';
 
-our $VERSION = '0.02';
+our $VERSION   = '0.03';
+our $AUTHORITY = 'cpan:STEVAN';
 
 use Class::MOP;
 
 sub import {
     shift;
-    my $metaclass = shift || 'Class::MOP::Class';
-    my %options   = @_;
-    my $package   = caller();
-    
-    ($metaclass->isa('Class::MOP::Class'))
-        || confess 'The metaclass must be derived from Class::MOP::Class';
+    my $metaclass;
+    if (!defined($_[0]) || $_[0] =~ /^(attribute|method|instance)_metaclass/) {
+        $metaclass = 'Class::MOP::Class';
+    }
+    else {
+        $metaclass = shift;
+        ($metaclass->isa('Class::MOP::Class'))
+            || confess "The metaclass ($metaclass) must be derived from Class::MOP::Class";
+    }
+    my %options = @_;
+    my $package = caller();
     
     # create a meta object so we can install &meta
     my $meta = $metaclass->initialize($package => %options);
@@ -56,8 +62,16 @@ metaclass - a pragma for installing and using Class::MOP metaclasses
   # and custom attribute and method
   # metaclasses
   use metaclass 'MyMetaClass' => (
-      ':attribute_metaclass' => 'MyAttributeMetaClass',
-      ':method_metaclass'    => 'MyMethodMetaClass',    
+      'attribute_metaclass' => 'MyAttributeMetaClass',
+      'method_metaclass'    => 'MyMethodMetaClass',    
+  );
+
+  # ... or just specify custom attribute
+  # and method classes, and Class::MOP::Class
+  # is the assumed metaclass
+  use metaclass (
+      'attribute_metaclass' => 'MyAttributeMetaClass',
+      'method_metaclass'    => 'MyMethodMetaClass',    
   );
 
 =head1 DESCRIPTION
@@ -66,10 +80,12 @@ This is a pragma to make it easier to use a specific metaclass
 and a set of custom attribute and method metaclasses. It also 
 installs a C<meta> method to your class as well. 
 
-=head1 AUTHOR
+=head1 AUTHORS
 
 Stevan Little E<lt>stevan@iinteractive.comE<gt>
 
+Yuval Kogman E<lt>nothingmuch@woobling.comE<gt>
+
 =head1 COPYRIGHT AND LICENSE
 
 Copyright 2006 by Infinity Interactive, Inc.
@@ -79,4 +95,4 @@ L<http://www.iinteractive.com>
 This library is free software; you can redistribute it and/or modify
 it under the same terms as Perl itself. 
 
-=cut
\ No newline at end of file
+=cut