diff options
Diffstat (limited to 'lib/Data/MultiValued/TagContainer.pm')
-rw-r--r-- | lib/Data/MultiValued/TagContainer.pm | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/lib/Data/MultiValued/TagContainer.pm b/lib/Data/MultiValued/TagContainer.pm index a65115b..2408576 100644 --- a/lib/Data/MultiValued/TagContainer.pm +++ b/lib/Data/MultiValued/TagContainer.pm @@ -10,6 +10,9 @@ use Moose::Util::TypeConstraints; use MooseX::Types::Moose qw(HashRef); use Data::MultiValued::Exceptions; +# ABSTRACT: container for tagged values + + has _storage => ( is => 'rw', isa => HashRef, @@ -31,6 +34,7 @@ has _default_tag => ( clearer => '_clear_default_tag', ); + sub get { my ($self,$args) = @_; @@ -54,6 +58,7 @@ sub get { return $self->_get_tag($tag); } + sub get_or_create { my ($self,$args) = @_; @@ -82,6 +87,7 @@ sub _clear_storage { $self->_storage({}); } + sub clear { my ($self,$args) = @_; @@ -97,6 +103,7 @@ sub clear { return; } + sub _create_new_inferior { my ($self) = @_; return {}; @@ -109,12 +116,66 @@ __END__ =head1 NAME -Data::MultiValued::TagContainer +Data::MultiValued::TagContainer - container for tagged values =head1 VERSION version 0.0.1 +=head1 DESCRIPTION + +Please don't use this module directly, use L<Data::MultiValued::Tags>. + +This module implements the storage for tagged data. It's almost +exactly a hash, the main difference being that C<undef> is a valid key +and it's distinct from the empty string. + +Another difference is that you get an exception if you try to access a +tag that's not there. + +Data is kept in "storage cells", as created by +L</_create_new_inferior> (by default, a hashref). + +=head1 METHODS + +=head2 C<get> + + my $value = $obj->get({ tag => $the_tag }); + +Retrieves the "storage cell" for the given tag. Throws a +L<Data::MultiValued::Exceptions::TagNotFound> exception if the tag +does not exists in this object. + +Not passing in a C<tag> is equivalent to passing in C<< tag => undef +>>. + +=head2 C<get_or_create> + + $obj->get_or_create({ tag => $the_tag }); + +Retrieves the "storage cell" for the given tag. If the tag does not +exist, creates a new cell (see L</_create_new_inferior>), sets it for +the tag, and returns it. + +Not passing in a C<tag> is equivalent to passing in C<< tag => undef +>>. + +=head2 C<clear> + + $obj->clear({ tag => $the_tag }); + +Deletes the given tag and all data associated with it. Does not throw +exceptions: if the tag does not exist, nothing happens. + +Not passing in a C<tag>, or passing C<< tag => undef >>, clears +everything. If you want to only clear the C<undef> tag, you may call +C<_clear_default_tag> (which is considered a "protected" method). + +=head2 C<_create_new_inferior> + +Returns a new "storage cell", by default an empty hashref. See +L<Data::MultiValued::TagContainerForRanges> for an example of use. + =head1 AUTHOR Gianni Ceccarelli <dakkar@thenautilus.net> |