On Tue, May 3, 2011 at 2:03 PM, Jesse Luehrs <d...@tozt.net> wrote: > On Tue, May 03, 2011 at 01:59:33PM -0700, Ben Tilly wrote: >> According to the documentation for Moose::Exporter I would expect the >> following two modules to be equivalent: >> >> package TestMooseExporter; >> use Moose (); >> use Moose::Exporter; >> >> Moose::Exporter->setup_import_methods( >> with_meta => [qw( >> hello >> )], >> also => "Moose", >> base_class_roles => ["TestRole"], >> ); >> >> sub hello { >> my $meta = shift; >> print "Hello, $meta->{package}\n"; >> } >> >> 1; >> >> and >> >> package TestMooseExporter; >> use Moose (); >> use Moose::Exporter; >> use Moose::Util::MetaRole; >> >> Moose::Exporter->setup_import_methods( >> with_meta => [qw( >> hello >> )], >> also => "Moose", >> ); >> >> sub hello { >> my $meta = shift; >> print "Hello, $meta->{package}\n"; >> } >> >> 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; >> >> But they are not. The second forces TestRole to be applied to any >> class that uses the module, and the first does not. >> >> Looking inside of Moose::Exporter::_make_init_meta I see the following >> section of code that should set up the role: >> >> Moose::Util::MetaRole::apply_base_class_roles( >> for_class => $options{for_class}, >> %base_class_roles, >> ) >> if Class::MOP::class_of( $options{for_class} ) >> ->isa('Moose::Meta::Class'); >> >> I have no idea why that inline if is there, but it seems to be >> preventing Moose from working like the documentation lead me to expect >> it would. > > See http://rt.cpan.org/Public/Bug/Display.html?id=51561. This will > hopefully be fixed soon (maybe by 2.02?), but for right now, you have to > write your own init_meta method if you're doing "also => ['Moose']".
Thanks for the confirmation. Is there any reason not to mention the bug in the documentation until it is fixed?