MouseX::AttributeHelpers::Collection::Bag - MouseX::AttributeHelpers::Collection::Bag documentation


MouseX-AttributeHelpers documentation Contained in the MouseX-AttributeHelpers distribution.

Index


Code Index:

NAME

Top

MouseX::AttributeHelpers::Collection::Bag

SYNOPSIS

Top

    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',
        },
    );

DESCRIPTION

Top

This module provides an Hash attribute which provides a number of hash-like operations.

PROVIDERS

Top

This module also consumes the ImmutableHash method providers. See also MouseX::AttributeHelpers::Collection::ImmutableHash.

add

delete

reset

METHODS

Top

method_constructors

helper_type

helper_default

AUTHOR

Top

NAKAGAWA Masaki <masaki@cpan.org>

LICENSE

Top

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

Top

MouseX::AttributeHelpers, MouseX::AttributeHelpers::Base, MouseX::AttributeHelpers::Collection::ImmutableHash


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__