Heya folks,

Sorry in-advance for the long post, but it's the minimal amount of
code that I could demonstrate this issue...

When creating a new MooseX extension, within a rolled-in attribute,
I'm unable to use associated_class method to get the consuming class
(well, it succeeds, but returns undef).  I was looking to use this to
ensure at class-creation time that only a single attribute has the
given value set, but I'm unable to determine what the consuming class
is.

A pared down example that demonstrates this is as-follows:

-=-=-

package ASDF;

use Moose;
use Moose::Exporter;
use Moose::Util::MetaRole;
use ASDF::AttributeRole;

Moose::Exporter->setup_import_methods( also => 'Moose' );

sub init_meta {
    my ( undef, %options ) = @_;

    Moose->init_meta( %options );

    Moose::Util::MetaRole::apply_metaclass_roles(
        for_class                   => $options{ for_class },
        attribute_metaclass_roles   => [
            qw( ASDF::AttributeRole ),
        ],
    );

    return $options{ for_class }->meta;
};

no Moose;

1;

package ASDF::AttributeRole;

use Moose::Role;

has asdf => (
    is      => 'ro',
    trigger => sub {
        my ( $self, $value ) = @_;

        printf( "In trigger, assosciated class = %s\n",
            $self->associated_class
        );
    },
);

1;

#!/usr/bin/perl

use lib '.';

package XYZ;

use Moose;
use ASDF;

has qwerty => (
    is      => 'ro',
    asdf    => 1,
);

-=-=-

I'd have expected the trigger within ASDF::AttributeRole to inform
that the associated_class is 'XYZ'.  Instead, I'm getting:

<<EOOUTPUT
Use of uninitialized value in printf at ASDF/AttributeRole.pm line 10.
In trigger, assosciated class =
EOOUTPUT

Very likely it's something I'm doing wrong here (it's my first attempt
at a MooseX class), hence why post here, and not as a bug report.

Cheers,
Mark.

Reply via email to