Start to support "use Mouse -traits => ..."
gfx [Tue, 17 Nov 2009 08:11:54 +0000 (17:11 +0900)]
lib/Mouse/Exporter.pm

index 18a3387..ce5757d 100644 (file)
@@ -149,7 +149,7 @@ sub do_import {
         my $arg = shift @args;
         if($arg =~ s/^-//){
             if($arg eq 'traits'){
-                push @traits, @{shift(@args)};
+                push @traits, ref($args[0]) ? @{shift(@args)} : shift(@args);
             }
             else {
                 Mouse::Util::not_supported("-$arg");
@@ -177,10 +177,11 @@ sub do_import {
         if(@traits){
             my $type = (split /::/, ref $meta)[-1]; # e.g. "Class" for "My::Meta::Class"
             @traits =
-                map{ ref($_) ? $_ : Mouse::Util::resolve_metaclass_alias($type => $_, trait => 1) }
-                @traits;
+                map{
+                    ref($_) ? $_
+                            : Mouse::Util::resolve_metaclass_alias($type => $_, trait => 1)
+                } @traits;
 
-            not_supported('-traits');
             require Mouse::Util::MetaRole;
             Mouse::Util::MetaRole::apply_metaclass_roles(
                 for_class       => $into,
@@ -188,6 +189,9 @@ sub do_import {
             );
         }
     }
+    elsif(@traits){
+        Carp::confess("Cannot provide traits when $package does not have an init_meta() method");
+    }
 
     if(@exports){
         foreach my $keyword(@exports){