use strict;
use warnings;
-our $VERSION = '0.93';
+our $VERSION = '1.08';
+our $XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
use XSLoader;
-XSLoader::load( 'Moose', $VERSION );
+XSLoader::load( 'Moose', $XS_VERSION );
my %EXPORT_SPEC;
return unless @resolved_traits;
- Moose::Util::MetaRole::apply_metaclass_roles(
- for_class => $class,
- metaclass_roles => \@resolved_traits,
- );
+ my %args = ( for => $class );
+
+ if ( $meta->isa('Moose::Meta::Role') ) {
+ $args{role_metaroles} = { role => \@resolved_traits };
+ }
+ else {
+ $args{class_metaroles} = { class => \@resolved_traits };
+ }
+
+ Moose::Util::MetaRole::apply_metaroles(%args);
}
sub _get_caller {
$export_recorder,
$is_reexport,
);
+ strict->unimport;
+ warnings->unimport;
};
}
my $class = shift;
my $args = shift;
- my %metaclass_roles;
+ my %old_style_roles;
for my $role (
map {"${_}_roles"}
- qw(metaclass
+ qw(
+ metaclass
attribute_metaclass
method_metaclass
wrapped_method_metaclass
constructor_class
destructor_class
error_class
- application_to_class_class
- application_to_role_class
- application_to_instance_class)
+ )
) {
- $metaclass_roles{$role} = $args->{$role} if exists $args->{$role};
+ $old_style_roles{$role} = $args->{$role}
+ if exists $args->{$role};
}
my %base_class_roles;
%base_class_roles = ( roles => $args->{base_class_roles} )
if exists $args->{base_class_roles};
- return unless %metaclass_roles || %base_class_roles;
+ my %new_style_roles = map { $_ => $args->{$_} }
+ grep { exists $args->{$_} } qw( class_metaroles role_metaroles );
+
+ return unless %new_style_roles || %old_style_roles || %base_class_roles;
return sub {
shift;
return unless Class::MOP::class_of( $options{for_class} );
- Moose::Util::MetaRole::apply_metaclass_roles(
- for_class => $options{for_class},
- %metaclass_roles,
+ Moose::Util::MetaRole::apply_metaroles(
+ for => $options{for_class},
+ %new_style_roles,
+ %old_style_roles,
);
Moose::Util::MetaRole::apply_base_class_roles(
warnings->import;
}
+sub unimport {
+ strict->unimport;
+ warnings->unimport;
+}
+
1;
__END__
exported by some other module (like C<Moose.pm>).
The C<unimport> method cleans the caller's namespace of all the exported
-functions.
+functions. This includes any functions you re-export from other
+packages. However, if the consumer of your package also imports those
+functions from the original package, they will I<not> be cleaned.
If you pass any parameters for L<Moose::Util::MetaRole>, this method will
generate an C<init_meta> for you as well (see below for details). This
=back
-Any of the C<*_roles> options for
-C<Moose::Util::MetaRole::apply_metaclass_roles> and
-C<Moose::Util::MetaRole::base_class_roles> are also acceptable.
+You can also provide parameters for C<Moose::Util::MetaRole::apply_metaroles>
+and C<Moose::Util::MetaRole::base_class_roles>. Specifically, valid parameters
+are "class_metaroles", "role_metaroles", and "base_object_roles".
=item B<< Moose::Exporter->build_import_methods(...) >>
instance. Providing traits for an exporting class that does not create
a metaclass for the caller is an error.
+=head1 BUGS
+
+See L<Moose/BUGS> for details on reporting bugs.
+
=head1 AUTHOR
Dave Rolsky E<lt>autarch@urth.orgE<gt>