diff options
Diffstat (limited to 'Data-TagsAndRanges')
3 files changed, 40 insertions, 16 deletions
diff --git a/Data-TagsAndRanges/lib/Data/TagsAndRanges.pm b/Data-TagsAndRanges/lib/Data/TagsAndRanges.pm index 7c8ed7b..8a94b8f 100644 --- a/Data-TagsAndRanges/lib/Data/TagsAndRanges.pm +++ b/Data-TagsAndRanges/lib/Data/TagsAndRanges.pm @@ -4,19 +4,19 @@ use MooseX::Params::Validate; use Moose::Util::TypeConstraints; use MooseX::Types::Moose qw(Num Str Undef Any); use Data::TagsAndRanges::Exceptions; -use Data::TagsAndRanges::TagContainer; +use Data::TagsAndRanges::TagContainerForRanges; # ABSTRACT: Handle values with tags and validity ranges has _storage => ( is => 'rw', - isa => class_type('Data::TagsAndRanges::TagContainer'), + isa => class_type('Data::TagsAndRanges::TagContainerForRanges'), init_arg => undef, lazy_build => 1, ); sub _build__storage { - Data::TagsAndRanges::TagContainer->new(); + Data::TagsAndRanges::TagContainerForRanges->new(); } sub set { diff --git a/Data-TagsAndRanges/lib/Data/TagsAndRanges/TagContainer.pm b/Data-TagsAndRanges/lib/Data/TagsAndRanges/TagContainer.pm index c820f9a..8ede59f 100644 --- a/Data-TagsAndRanges/lib/Data/TagsAndRanges/TagContainer.pm +++ b/Data-TagsAndRanges/lib/Data/TagsAndRanges/TagContainer.pm @@ -3,11 +3,10 @@ use Moose; use Moose::Util::TypeConstraints; use MooseX::Types::Moose qw(HashRef); use Data::TagsAndRanges::Exceptions; -use Data::TagsAndRanges::RangeContainer; has _storage => ( is => 'rw', - isa => HashRef[class_type('Data::TagsAndRanges::RangeContainer')], + isa => HashRef, init_arg => undef, default => sub { { } }, traits => ['Hash'], @@ -18,11 +17,10 @@ has _storage => ( }, ); -has _default_range => ( +has _default_tag => ( is => 'rw', - isa => class_type('Data::TagsAndRanges::RangeContainer'), init_arg => undef, - predicate => '_has_default_range', + predicate => '_has_default_tag', ); sub get { @@ -31,8 +29,8 @@ sub get { my $tag = $args->{tag}; if (!defined($tag)) { - if ($self->_has_default_range) { - return $self->_default_range; + if ($self->_has_default_tag) { + return $self->_default_tag; } Data::TagsAndRanges::Exceptions::TagNotFound->throw({ @@ -54,20 +52,25 @@ sub get_or_create { my $tag = $args->{tag}; if (!defined($tag)) { - if ($self->_has_default_range) { - return $self->_default_range; + if ($self->_has_default_tag) { + return $self->_default_tag; } else { - return $self->_default_range( - Data::TagsAndRanges::RangeContainer->new() - ); + return $self->_default_tag( + $self->_create_new_inferior + ); } } if (!$self->_has_tag($tag)) { - $self->_create_tag($tag,Data::TagsAndRanges::RangeContainer->new()); + $self->_create_tag($tag,$self->_create_new_inferior); } return $self->_get_tag($tag); } +sub _create_new_inferior { + my ($self) = @_; + return {}; +} + 1; diff --git a/Data-TagsAndRanges/lib/Data/TagsAndRanges/TagContainerForRanges.pm b/Data-TagsAndRanges/lib/Data/TagsAndRanges/TagContainerForRanges.pm new file mode 100644 index 0000000..3c1b44a --- /dev/null +++ b/Data-TagsAndRanges/lib/Data/TagsAndRanges/TagContainerForRanges.pm @@ -0,0 +1,21 @@ +package Data::TagsAndRanges::TagContainerForRanges; +use Moose; +use MooseX::Types::Moose qw(HashRef); +use Moose::Util::TypeConstraints; +use Data::TagsAndRanges::RangeContainer; + +extends 'Data::TagsAndRanges::TagContainer'; + +has '+_storage' => ( + isa => HashRef[class_type('Data::TagsAndRanges::RangeContainer')], +); + +has '+_default_tag' => ( + isa => class_type('Data::TagsAndRanges::RangeContainer'), +); + +sub _create_new_inferior { + Data::TagsAndRanges::RangeContainer->new(); +} + +1; |