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?

Reply via email to