I have a few Moose classes with attributes along the lines of
has 'items' => (
is => 'rw',
isa => 'ArrayRef[<Foo>]'
);
Generally I tend to add a coercion for the HashRef type into whatever
<Foo> is for each of these attributes, so they will accept either
<Foo>s or hashrefs.
This is all fine when setting the contents of these attributes in
their entirety using ->new( items => [ ... ] ) or ->items( [ ... ] ),
but when it comes to adding items I'm finding myself repeatedly doing
something along the following lines:
sub add_item {
my( $self, $item ) = @_;
my $items = $self->items;
push @$items, $item;
$self->items( $items );
}
This seems a bit clunky and I'm wondering if there is a better way.
MooseX::AttributeHelpers seems to allow me to auto-generate this type
of method, but I can't work out how to get it to perform coercion on
$item.
I've read through the docs and googled but have not been able to find
a best practice. Is there one and if so, what is it?
Thanks, Will