On Thu, Apr 23, 2009 at 02:43:37PM +0100, Mark Morgan wrote:
> Based on the above, the adding of the attributes should be done for
> the entire class once, when the role is first used. I don't like
> having to wrap constructor creation to handle this, better that there
> should be an on-role-included hook that could be tied into. Does such
> exist? I've not seen anything documented for this type of behaviour.
No, and it usually means you're doing something wrong. Adding new attributes
to a *class* when you create an *object* definitely fits. Use
MooseX::Role::Parameterized.
package DoesBooleanFilter;
use MooseX::Role::Parameterized;
parameter boolean_filters => (isa => 'ArrayRef[Str]', required => 1);
role {
my $p = shift;
for my $filter (@{ $p->boolean_filters }) {
has $filter => (
is => 'ro',
predicate => "has_$filter",
);
}
};
package SomeClass;
use Moose;
with 'DoesBooleanFilter' => { boolean_filters => [ qw(hello goodbye) ] };
hdp.