blob: f6d4d5b571c1751af1fffa96e62e22ec4d6f9eec (
plain) (
tree)
|
|
package MooseX::Exporter::Easy;
use Moose ();
use Moose::Exporter;
use Carp qw(confess);
use Scalar::Util qw(blessed);
Moose::Exporter->setup_import_methods(
with_meta => [qw(with_meta as_is also
class_metaroles role_metaroles base_class_roles
export)],
);
sub with_meta {
my ($meta, $name, $sub) = @_;
confess "with_meta requires a name and a sub to export"
unless defined($name) && defined($sub) && ref($sub) eq 'CODE';
$meta->add_with_meta($name, $sub);
}
sub as_is {
my ($meta, $name, $sub) = @_;
confess "as_is requires a name and a sub to export"
unless defined($name) && defined($sub) && ref($sub) eq 'CODE';
$meta->add_as_is($name, $sub);
}
sub also {
my ($meta, @also) = @_;
$meta->add_also(@also);
}
sub class_metaroles {
my ($meta, $roles) = @_;
$meta->class_metaroles($roles);
}
sub role_metaroles {
my ($meta, $roles) = @_;
$meta->role_metaroles($roles);
}
sub base_class_roles {
my ($meta, @roles) = @_;
$meta->add_base_class_roles(@roles);
}
sub export {
my ($meta) = @_;
$meta->setup_exporter;
}
# move this into Moose::Util?
sub with_traits {
my ($class, @roles) = @_;
return Moose::Meta::Class->create_anon_class(
superclasses => [$class],
roles => \@roles,
cache => 1,
)->name;
}
sub init_meta {
my $package = shift;
my %opts = @_;
my $meta_name = blessed(Class::MOP::class_of($opts{for_class}))
|| 'Class::MOP::Package';
$meta_name = with_traits($meta_name, 'MooseX::Exporter::Easy::Meta::Role::Package');
my $meta = $meta_name->reinitialize($opts{for_class});
}
1;
|