Version 0.40_01
[gitmo/Mouse.git] / lib / Mouse / Exporter.pm
index 91ccff0..f019f33 100644 (file)
@@ -102,7 +102,7 @@ sub build_import_methods{
 
             if(my $init_meta = $package->can('init_meta')){
                 if(!grep{ $_ == $init_meta } @init_meta_methods){
-                    unshift @init_meta_methods, $init_meta;
+                    push @init_meta_methods, $init_meta;
                 }
             }
         }
@@ -143,10 +143,17 @@ sub do_import {
     my $into = _get_caller_package(ref($args[0]) ? shift @args : undef);
 
     my @exports;
+    my @traits;
 
-    foreach my $arg(@args){
+    while(@args){
+        my $arg = shift @args;
         if($arg =~ s/^-//){
-            Mouse::Util::not_supported("-$arg");
+            if($arg eq 'traits'){
+                push @traits, @{shift(@args)};
+            }
+            else {
+                Mouse::Util::not_supported("-$arg");
+            }
         }
         elsif($arg =~ s/^://){
             my $group = $spec->{groups}{$arg}
@@ -161,17 +168,27 @@ sub do_import {
     $^H              |= _strict_bits;         # strict->import;
     ${^WARNING_BITS}  = $warnings::Bits{all}; # warnings->import;
 
-    if($into eq 'main' && !$spec->{_export_to_main}){
-        warn qq{$package does not export its sugar to the 'main' package.\n};
-        return;
-    }
-
     if($spec->{INIT_META}){
+        my $meta;
         foreach my $init_meta(@{$spec->{INIT_META}}){
-            $into->$init_meta(for_class => $into);
+            $meta = $into->$init_meta(for_class => $into);
         }
 
-        # _apply_meta_traits($into); # TODO
+        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;
+
+            print "[@traits]\n";
+
+            not_supported('-traits');
+            require Mouse::Util::MetaRole;
+            Mouse::Util::MetaRole::apply_metaclass_roles(
+                for_class       => $into,
+                metaclass_roles => \@traits,
+            );
+        }
     }
 
     if(@exports){
@@ -241,6 +258,10 @@ __END__
 
 Mouse::Exporter - make an import() and unimport() just like Mouse.pm
 
+=head1 VERSION
+
+This document describes Mouse version 0.40_01
+
 =head1 SYNOPSIS
 
     package MyApp::Mouse;\r