develooper Front page | perl.moose | Postings from August 2016

nested traits problem with moose 2.1005->2.1804

From:
Toby Blake
Date:
August 12, 2016 09:54
Subject:
nested traits problem with moose 2.1005->2.1804
Message ID:
alpine.LRH.2.11.1608121051380.5093@bolt.inf.ed.ac.uk
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.




nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About