http://www.perlmonks.org?node_id=902764


in reply to Re: Installing role with Moose::Exporter
in thread Installing role with Moose::Exporter

Thanks. I finally figured it out. The trick is in when init_meta is called. This code works:
package TestMooseExporter; use Data::Dumper; $Data::Dumper::Indent = 1; use Moose (); use Moose::Exporter; use Moose::Util::MetaRole; Moose::Exporter->setup_import_methods( with_meta => [qw( hello )], also => "Moose", ); sub hello { # print Dumper($_) for @_; print $_[0]->{package}; } sub init_meta { shift; my %args = @_; Moose->init_meta(%args); Moose::Util::MetaRole::apply_base_class_roles( for => $args{for_class}, roles => ['TestRole'], ); return $args{for_class}->meta; } 1;
However in a class that uses this, the role is not applied until after the class compiles. So my test code which tried to call a function inside of the module failed to find the role applied. But if I wait and look for methods later, it all works.