package Data::MultiValued::AttributeTrait::TagsAndRanges;
use Moose::Role;
use namespace::autoclean;
use Data::MultiValued::TagsAndRanges;
with 'Data::MultiValued::AttributeTrait';
sub multivalue_storage_class { 'Data::MultiValued::TagsAndRanges' };
sub opts_to_pass_set { qw(from to tag) }
sub opts_to_pass_get { qw(at tag) }
require Data::MultiValued::AttributeTrait::Tags;
sub all_tags {
my ($self,$instance) = @_;
return $self->Data::MultiValued::AttributeTrait::Tags::all_tags($instance);
}
sub all_tags_and_ranges {
my ($self,$instance) = @_;
my $storage = $self->get_full_storage($instance);
return unless $storage;
my @tags = $self->all_tags($instance);
my @tags_and_ranges;
for my $tag (@tags) {
my @these_ranges = $storage->_storage
->get({tag=>$tag})->all_ranges;
push @tags_and_ranges,[$tag, \@these_ranges];
}
return @tags_and_ranges;
}
package Moose::Meta::Attribute::Custom::Trait::MultiValued::TagsAndRanges;{
sub register_implementation { 'Data::MultiValued::AttributeTrait::TagsAndRanges' }
}
1;