Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

nested traits problem with moose 2.1005->2.1804

0 views
Skip to first unread message

Toby Blake

unread,
Aug 12, 2016, 6:00:02 AM8/12/16
to mo...@perl.org
Hi,

We have a bit of code which has broken between 2.1005 and 2.1804 - it
was originally written somewhere around 0.85 and I don't think has
really changed much since then.

The code involves a trait which consumes another trait, and this seems
to be what's causing the problem. Hopefully some (cut-down) code will
explain this...


package Test::Meta::Role::Trait::CoreObject;

use Moose::Role;

has primaryAttribute => (
is => 'rw',
isa => 'Str');

Moose::Exporter->setup_import_methods(
with_caller => [ 'primaryKey' ],
also => 'Moose::Role',
);

sub primaryKey {
my $meta = shift;
$meta = Moose::Meta::Role->initialize($meta) if !ref($meta);

return $meta->primaryAttribute(@_);
}

no Moose::Role;

package Moose::Meta::Role::Custom::Trait::CoreObject;
sub register_implementation
{'Test::Meta::Role::Trait::CoreObject'};

1;


package Test::Meta::Role::Trait::LDAPObject;

use Moose::Role;

with 'Test::Meta::Role::Trait::CoreObject';

has oid => (
is => 'rw',
isa =>'Str',
);

Moose::Exporter->setup_import_methods(
with_caller => [ 'oid', 'primaryKey' ],
also => 'Moose::Role',
);

sub oid {
my $meta = Moose::Meta::Role->initialize(shift);
$meta->oid(shift);
}

no Moose::Role;

package Moose::Meta::Role::Custom::Trait::LDAPObject;
sub register_implementation
{'Test::Meta::Role::Trait::LDAPObject'};

1;


package Test::TestRole;
use Test::Meta::Role::Trait::LDAPObject;
se Moose::Role -traits => 'LDAPObject';

oid '1.3.6.1.4.1.4247.1.747.99.23';

no Moose::Role;
1;


$ perl -Ilib -MTest::TestRole
String found where operator expected at lib/Test/TestRole.pm line 5, near "oid '1.3.6.1.4.1.4247.1.747.99.23'"
(Do you need to predeclare oid?)
syntax error at lib/Test/TestRole.pm line 5, near "oid '1.3.6.1.4.1.4247.1.747.99.23'"
BEGIN not safe after errors--compilation aborted at lib/Test/TestRole.pm line 7.
Compilation failed in require.
BEGIN failed--compilation aborted.
$


The LDAPObject trait works fine when it doesn't consume the CoreObject
trait (and I remove primaryKey from setup_import_methods), so I
suspect we're using Moose::Exporter incorrectly, but I'm not too
familiar with this side of moose meta, in that I don't want to try and
jsut hack my way around it. Any assistance would be greatly
appreciated.


Cheers
Toby Blake
School of Informatics
University of Edinburgh

--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.

0 new messages