I'm attempting to allow an attribute trait's attributes (meta meta meta) to be overridden via the
"has '+foo' ..." form, but this doesn't seem to work. It doesn't look like my
"around" of Moose::Meta::Attribute::legal_options_for_inheritance() is being invoked.
What am I doing wrong? I'm guessing that it has something to do with the role
attribute not having the trait, but, of course, that's one of the things I'm
trying to do here.
=== error ===
Illegal inherited options => (getopt_name) at
/Users/elliot/opt/perl/perl-5.10.0-64bit-threads/lib/site_perl/5.10.0/Moose/Meta/Class.pm
line 565
Moose::Meta::Class::_process_inherited_attribute('Moose::Meta::Class=HASH(0x9e7488)',
'modified_attribute', 'definition_context', 'HASH(0xbb4470)', 'getopt_name',
'modified', 'traits', 'ARRAY(0x9e9dd4)') called at
/Users/elliot/opt/perl/perl-5.10.0-64bit-threads/lib/site_perl/5.10.0/Moose/Meta/Class.pm
line 547
Moose::Meta::Class::_process_attribute('Moose::Meta::Class=HASH(0x9e7488)',
'+modified_attribute', 'definition_context', 'HASH(0xbb4470)', 'getopt_name',
'modified', 'traits', 'ARRAY(0x9e9dd4)') called at
/Users/elliot/opt/perl/perl-5.10.0-64bit-threads/lib/site_perl/5.10.0/Moose/Meta/Class.pm
line 246
Moose::Meta::Class::add_attribute('Moose::Meta::Class=HASH(0x9e7488)',
'+modified_attribute', 'definition_context', 'HASH(0xbb4470)', 'getopt_name',
'modified', 'traits', 'ARRAY(0x9e9dd4)') called at
/Users/elliot/opt/perl/perl-5.10.0-64bit-threads/lib/site_perl/5.10.0/Moose.pm
line 69
Moose::has('Moose::Meta::Class=HASH(0x9e7488)', '+modified_attribute',
'traits', 'ARRAY(0x9e9dd4)', 'getopt_name', 'modified') called at
/Users/elliot/opt/perl/perl-5.10.0-64bit-threads/lib/site_perl/5.10.0/Moose/Exporter.pm
line 288
Moose::has('+modified_attribute', 'traits', 'ARRAY(0x9e9dd4)',
'getopt_name', 'modified') called at test line 45
=== file "test" ===
package MooseX::Getopt::Defanged::Meta::Attribute::Trait::_Getopt;
use 5.010;
use Moose::Role;
has getopt_name => (
isa => 'Str',
is => 'ro',
required => 0,
reader => 'get_getopt_name',
writer => 'set_getopt_name',
);
my @extra_legal_options = qw< getopt_name >;
around legal_options_for_inheritance => sub {
my ($original, $self, @arguments) = @_;
return $self->$original(@arguments), @extra_legal_options;
}; # end around legal_options_for_inheritance()
package Moose::Meta::Attribute::Custom::Trait::MooseX::Getopt::Defanged::Option;
sub register_implementation {
return 'MooseX::Getopt::Defanged::Meta::Attribute::Trait::_Getopt';
} # end register_implementation()
package Role;
use Moose::Role;
has modified_attribute => (
is => 'rw',
isa => 'Str',
);
package Consumer;
use Moose;
with qw< Role MooseX::Getopt::Defanged >;
has '+modified_attribute' => (
traits => [ qw< MooseX::Getopt::Defanged::Option > ],
getopt_name => 'modified',
);