On Thu, Apr 23, 2009 at 3:52 PM, Hans Dieter Pearcey <h...@pobox.com> wrote: > 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.
Cheers to both yourself and Steven Little. That looks to do exactly what I was looking for. I didn't like my current implementation, but couldn't find an alternate way of doing same. Cheers, Mark.