tweaking
[gitmo/Class-MOP.git] / lib / metaclass.pm
index b09417e..b5658dc 100644 (file)
@@ -7,19 +7,24 @@ use warnings;
 use Carp         'confess';
 use Scalar::Util 'blessed';
 
-our $VERSION = '0.02';
+our $VERSION = '0.03';
 
 use Class::MOP;
 
 sub import {
     shift;
-    my $metaclass = shift || '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 must be derived from Class::MOP::Class';        
+    }
     my %options   = @_;
     my $package   = caller();
     
-    ($metaclass->isa('Class::MOP::Class'))
-        || confess 'The metaclass must be derived from Class::MOP::Class';
-    
     # create a meta object so we can install &meta
     my $meta = $metaclass->initialize($package => %options);
     $meta->add_method('meta' => sub {
@@ -60,6 +65,14 @@ metaclass - a pragma for installing and using Class::MOP metaclasses
       ':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
 
 This is a pragma to make it easier to use a specific metaclass