use strict;
use warnings;
-our $VERSION = '0.73';
+our $VERSION = '0.79';
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
use List::MoreUtils qw( first_index uniq );
use Moose::Util::MetaRole;
use Sub::Exporter;
-
+use Sub::Name qw(subname);
my %EXPORT_SPEC;
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;
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).
# 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;
}
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 ) = @_;
}
}
+sub import {
+ strict->import;
+ warnings->import;
+}
+
1;
__END__
package MyApp::Moose;
- use strict;
- use warnings;
-
use Moose ();
use Moose::Exporter;
=head1 DESCRIPTION
-This module encapsulates the logic to export sugar functions like
-C<Moose.pm>. It does this by building custom C<import> and C<unimport>
-methods for your module, based on a spec your provide.
+This module encapsulates the exporting of sugar functions in a
+C<Moose.pm>-like manner. It does this by building custom C<import> and
+C<unimport> 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<MooseX> module, as long as they all use C<Moose::Exporter>.
+To simplify writing exporter modules, C<Moose::Exporter> also imports
+C<strict> and C<warnings> into your exporter module, as well as into
+modules that use it.
+
=head1 METHODS
This module provides two public methods: