package Data::MultiValued::TagContainerForRanges; use Moose; use MooseX::Types::Moose qw(HashRef); use Moose::Util::TypeConstraints; use Data::MultiValued::RangeContainer; extends 'Data::MultiValued::TagContainer'; has '+_storage' => ( isa => HashRef[class_type('Data::MultiValued::RangeContainer')], ); has '+_default_tag' => ( isa => class_type('Data::MultiValued::RangeContainer'), ); sub _create_new_inferior { Data::MultiValued::RangeContainer->new(); } sub _rebless_storage { my ($self) = @_; bless $_,'Data::MultiValued::RangeContainer' for values %{$self->{_storage}}; bless $self->{_default_tag},'Data::MultiValued::RangeContainer'; return; } sub _as_hash { my ($self) = @_; my %st; for my $k (keys %{$self->_storage}) { my %v = %{$self->_storage->{$k}}; $st{$k}=\%v; } my %dt = %{$self->_default_tag}; return { _storage => \%st, _default_tag => \%dt, }; } 1;