X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FExporter.pm;h=fa3cd52148c28b225c6e63c8d4b75b71ab122d06;hb=24aef5e1b8f39b16a54be52d7a4b16c511b1583c;hp=536d41fc628af987e596c9d2435036301b1bff38;hpb=baf46b9edc7dc3665c7eaf9d1684b157efb09e1a;p=gitmo%2FMoose.git diff --git a/lib/Moose/Exporter.pm b/lib/Moose/Exporter.pm index 536d41f..fa3cd52 100644 --- a/lib/Moose/Exporter.pm +++ b/lib/Moose/Exporter.pm @@ -3,7 +3,7 @@ package Moose::Exporter; use strict; use warnings; -our $VERSION = '0.72_01'; +our $VERSION = '0.77'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -11,7 +11,7 @@ use Class::MOP; use List::MoreUtils qw( first_index uniq ); use Moose::Util::MetaRole; use Sub::Exporter; - +use Sub::Name qw(subname); my %EXPORT_SPEC; @@ -184,7 +184,7 @@ sub _make_wrapped_sub { my $wrapper = $self->_make_wrapper($caller, $sub, $fq_name); - my $sub = Class::MOP::subname($fq_name => $wrapper); + my $sub = subname($fq_name => $wrapper); $export_recorder->{$sub} = 1; @@ -227,6 +227,9 @@ sub _make_import_sub { my $traits; ( $traits, @_ ) = _strip_traits(@_); + my $metaclass; + ( $metaclass, @_ ) = _strip_metaclass(@_); + # Normally we could look at $_[0], but in some weird cases # (involving goto &Moose::import), $_[0] ends as something # else (like Squirrel). @@ -256,7 +259,7 @@ sub _make_import_sub { # Moose::Exporter, which in turn sets $CALLER, so we need # to protect against that. local $CALLER = $CALLER; - $c->init_meta( for_class => $CALLER ); + $c->init_meta( for_class => $CALLER, metaclass => $metaclass ); $did_init_meta = 1; } @@ -293,12 +296,24 @@ sub _strip_traits { return ( $traits, @_ ); } +sub _strip_metaclass { + my $idx = first_index { $_ eq '-metaclass' } @_; + + return ( undef, @_ ) unless $idx >= 0 && $#_ >= $idx + 1; + + my $metaclass = $_[ $idx + 1 ]; + + splice @_, $idx, 2; + + return ( $metaclass, @_ ); +} + sub _apply_meta_traits { my ( $class, $traits ) = @_; return unless @{$traits}; - my $meta = $class->meta(); + my $meta = Class::MOP::class_of($class); my $type = ( split /::/, ref $meta )[-1] or Moose->throw_error( @@ -371,6 +386,11 @@ sub _remove_keywords { } } +sub import { + strict->import; + warnings->import; +} + 1; __END__ @@ -383,9 +403,6 @@ Moose::Exporter - make an import() and unimport() just like Moose.pm package MyApp::Moose; - use strict; - use warnings; - use Moose (); use Moose::Exporter; @@ -418,12 +435,16 @@ Moose::Exporter - make an import() and unimport() just like Moose.pm This module encapsulates the logic to export sugar functions like C. It does this by building custom C and C -methods for your module, based on a spec your provide. +methods for your module, based on a spec you provide. -It also lets your "stack" Moose-alike modules so you can export +It also lets you "stack" Moose-alike modules so you can export Moose's sugar as well as your own, along with sugar from any random C module, as long as they all use C. +To simplify writing exporter modules, C also imports +C and C into your exporter module, as well as into +modules that use it. + =head1 METHODS This module provides two public methods: