| MouseX-AttributeHelpers documentation | Contained in the MouseX-AttributeHelpers distribution. |
MouseX::AttributeHelpers::Collection::Hash
package MyClass;
use Mouse;
use MouseX::AttributeHelpers;
has 'options' => (
metaclass => 'Collection::Hash',
is => 'rw',
isa => 'HashRef',
default => sub { +{} },
provides => {
set => 'set_option',
get => 'get_option',
empty => 'has_options',
count => 'num_options',
delete => 'delete_option',
},
);
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::Hash; use Mouse; 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 set => sub { my ($attr, $name) = @_; return sub { if (@_ == 3) { $_[0]->$name()->{$_[1]} = $_[2]; } else { my $self = shift; my (@k, @v); while (@_) { push @k, shift; push @v, shift; } @{ $self->$name() }{@k} = @v; } }; }, clear => sub { my ($attr, $name) = @_; return sub { %{ $_[0]->$name() } = () }; }, delete => sub { my ($attr, $name) = @_; return sub { delete @{ shift->$name() }{@_} }; }, }; }, ); sub helper_type { 'HashRef' } no Mouse; __PACKAGE__->meta->make_immutable(inline_constructor => 0); __END__