| MouseX-AttributeHelpers documentation | Contained in the MouseX-AttributeHelpers distribution. |
MouseX::AttributeHelpers::Collection::Bag
package MyClass;
use Mouse;
use MouseX::AttributeHelpers;
has 'word_histogram' => (
metaclass => 'Collection::Bag',
is => 'rw',
isa => 'Bag', # exported
default => sub { +{} },
provides => {
add => 'add_word',
get => 'get_count_for',
empty => 'has_any_words',
count => 'num_words',
delete => 'delete_word',
},
);
This module provides an Hash attribute which provides a number of hash-like operations.
This module also consumes the ImmutableHash method providers. See also MouseX::AttributeHelpers::Collection::ImmutableHash.
NAKAGAWA Masaki <masaki@cpan.org>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| MouseX-AttributeHelpers documentation | Contained in the MouseX-AttributeHelpers distribution. |
package MouseX::AttributeHelpers::Collection::Bag; use Mouse; use Mouse::Util::TypeConstraints; use MouseX::AttributeHelpers::Collection::ImmutableHash; extends 'MouseX::AttributeHelpers::Base'; has '+method_constructors' => ( default => sub { my $attr = MouseX::AttributeHelpers::Collection::ImmutableHash->meta->get_attribute('method_constructors'); return +{ %{ $attr->default->() }, # apply MouseX::AttributeHelpers::Collection::ImmutableHash add => sub { my ($attr, $name) = @_; return sub { $_[0]->$name()->{$_[1]}++ }; }, delete => sub { my ($attr, $name) = @_; return sub { delete $_[0]->$name()->{$_[1]} }; }, reset => sub { my ($attr, $name) = @_; return sub { $_[0]->$name()->{$_[1]} = 0 }; }, }; }, ); subtype 'Bag', as 'HashRef[Int]'; sub helper_type { 'Bag' } sub helper_default { sub { +{} } } no Mouse; no Mouse::Util::TypeConstraints; __PACKAGE__->meta->make_immutable(inline_constructor => 0); __END__