before modifier and provides with inheritance

[email protected] ("Michael Potter")
Newsgroups perl.moose
Message-ID <[email protected]>
Generally I have noticed the before modifier is carried through inheritance,
however I have come across a scenario where this does not seem to be the
case.

The case is where the before modifier is applied to a 'provides' installed
method, which is then adjusted using the 'has +$var' syntax. For some
reason, objects of the extended class no longer see the before modifier. See
code below if none of that made sense.

Is this 'feature' intentional? (actually I am hoping someone will say it is
a bug ;-) It threw a big spanner in the works of an otherwise very elegant
and compact object hierarchy. Sorry if there was something glaringly obvious
in the documentation explaining this...

#!/usr/bin/perl -w

package Foo;
use Moose;
use MooseX::AttributeHelpers;

has things => (is  => 'rw'
              ,isa => 'ArrayRef[Str]'
              ,metaclass => 'Collection::Array'
              ,default   => sub { [] }
              ,provides  => {
                push => 'add_thing'
              }
);

before add_thing => sub { warn "before\n" };

1;

package Bar;
use Moose;

extends 'Foo';

has '+things' => (lazy => 1);

1;

my $list1 = new Foo;
my $list2 = new Bar;

$list1->add_thing("bob");  // This line results in 'before' being printed
$list2->add_thing("jim");   // This line does not!
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.