bump version to 0.65
[gitmo/Moose.git] / lib / Moose / Exporter.pm
index 58be754..4ffe2ac 100644 (file)
@@ -3,6 +3,10 @@ package Moose::Exporter;
 use strict;
 use warnings;
 
+our $VERSION   = '0.65';
+$VERSION = eval $VERSION;
+our $AUTHORITY = 'cpan:STEVAN';
+
 use Class::MOP;
 use List::MoreUtils qw( first_index uniq );
 use Moose::Util::MetaRole;
@@ -164,7 +168,7 @@ sub _make_sub_exporter_params {
 our $CALLER;
 
 sub _make_wrapped_sub {
-    shift;
+    my $self            = shift;
     my $fq_name         = shift;
     my $sub             = shift;
     my $export_recorder = shift;
@@ -178,8 +182,9 @@ sub _make_wrapped_sub {
     return sub {
         my $caller = $CALLER;
 
-        my $sub
-            = Class::MOP::subname( $fq_name => sub { $sub->( $caller, @_ ) } );
+        my $wrapper = $self->_make_wrapper($caller, $sub, $fq_name);
+
+        my $sub = Class::MOP::subname($fq_name => $wrapper);
 
         $export_recorder->{$sub} = 1;
 
@@ -187,6 +192,15 @@ sub _make_wrapped_sub {
     };
 }
 
+sub _make_wrapper {
+    shift;
+    my $caller  = shift;
+    my $sub     = shift;
+    my $fq_name = shift;
+
+    return sub { $sub->($caller, @_) };
+}
+
 sub _make_import_sub {
     shift;
     my $exporting_package = shift;
@@ -232,6 +246,10 @@ sub _make_import_sub {
 
         my $did_init_meta;
         for my $c ( grep { $_->can('init_meta') } $class, @{$exports_from} ) {
+            # init_meta can apply a role, which when loaded uses
+            # Moose::Exporter, which in turn sets $CALLER, so we need
+            # to protect against that.
+            local $CALLER = $CALLER;
             $c->init_meta( for_class => $CALLER );
             $did_init_meta = 1;
         }