diff options
Diffstat (limited to 'lib/Data/MultiValued/AttributeTrait')
-rw-r--r-- | lib/Data/MultiValued/AttributeTrait/Ranges.pm | 51 | ||||
-rw-r--r-- | lib/Data/MultiValued/AttributeTrait/Tags.pm | 51 | ||||
-rw-r--r-- | lib/Data/MultiValued/AttributeTrait/TagsAndRanges.pm | 51 |
3 files changed, 153 insertions, 0 deletions
diff --git a/lib/Data/MultiValued/AttributeTrait/Ranges.pm b/lib/Data/MultiValued/AttributeTrait/Ranges.pm new file mode 100644 index 0000000..3d3b3f8 --- /dev/null +++ b/lib/Data/MultiValued/AttributeTrait/Ranges.pm @@ -0,0 +1,51 @@ +package Data::MultiValued::AttributeTrait::Ranges; +use Moose::Role; +use Data::MultiValued::Ranges; +with 'Data::MultiValued::AttributeTrait'; + +# ABSTRACT: attribute traits for attributes holding ranged values + +=head1 SYNOPSIS + + package My::Class; + use Moose; + use Data::MultiValued::AttributeTrait::Ranges; + + has stuff => ( + is => 'rw', + isa => 'Int', + traits => ['MultiValued::Ranges'], + predicate => 'has_stuff', + multi_accessor => 'stuff_tagged', + multi_predicate => 'has_stuff_tagged', + ); + +=head1 DESCRIPTION + +This role consumes L<Data::MultiValued::AttributeTrait> and +specialises it to use L<Data::MultiValued::Ranges> as multi-value +storage: + +=head2 C<multivalue_storage_class> + +Returns C<'Data::MultiValued::Ranges'>. + +=head2 C<opts_to_pass_set> + +Returns C<('from', 'to')>. + +=head2 C<opts_to_pass_get> + +Returns C<('at')>. + +=cut + +sub multivalue_storage_class { 'Data::MultiValued::Ranges' }; +sub opts_to_pass_set { qw(from to) } +sub opts_to_pass_get { qw(at) } + +package Moose::Meta::Attribute::Custom::Trait::MultiValued::Ranges;{ +sub register_implementation { 'Data::MultiValued::AttributeTrait::Ranges' } +} + +1; diff --git a/lib/Data/MultiValued/AttributeTrait/Tags.pm b/lib/Data/MultiValued/AttributeTrait/Tags.pm new file mode 100644 index 0000000..d671ed4 --- /dev/null +++ b/lib/Data/MultiValued/AttributeTrait/Tags.pm @@ -0,0 +1,51 @@ +package Data::MultiValued::AttributeTrait::Tags; +use Moose::Role; +use Data::MultiValued::Tags; +with 'Data::MultiValued::AttributeTrait'; + +# ABSTRACT: attribute traits for attributes holding tagged values + +=head1 SYNOPSIS + + package My::Class; + use Moose; + use Data::MultiValued::AttributeTrait::Tags; + + has stuff => ( + is => 'rw', + isa => 'Int', + traits => ['MultiValued::Tags'], + predicate => 'has_stuff', + multi_accessor => 'stuff_tagged', + multi_predicate => 'has_stuff_tagged', + ); + +=head1 DESCRIPTION + +This role consumes L<Data::MultiValued::AttributeTrait> and +specialises it to use L<Data::MultiValued::Tags> as multi-value +storage: + +=head2 C<multivalue_storage_class> + +Returns C<'Data::MultiValued::Tags'>. + +=head2 C<opts_to_pass_set> + +Returns C<('tag')>. + +=head2 C<opts_to_pass_get> + +Returns C<('tag')>. + +=cut + +sub multivalue_storage_class { 'Data::MultiValued::Tags' }; +sub opts_to_pass_set { qw(tag) } +sub opts_to_pass_get { qw(tag) } + +package Moose::Meta::Attribute::Custom::Trait::MultiValued::Tags;{ +sub register_implementation { 'Data::MultiValued::AttributeTrait::Tags' } +} + +1; diff --git a/lib/Data/MultiValued/AttributeTrait/TagsAndRanges.pm b/lib/Data/MultiValued/AttributeTrait/TagsAndRanges.pm new file mode 100644 index 0000000..0bb87ef --- /dev/null +++ b/lib/Data/MultiValued/AttributeTrait/TagsAndRanges.pm @@ -0,0 +1,51 @@ +package Data::MultiValued::AttributeTrait::TagsAndRanges; +use Moose::Role; +use Data::MultiValued::TagsAndRanges; +with 'Data::MultiValued::AttributeTrait'; + +# ABSTRACT: attribute traits for attributes holding tagged and ranged values + +=head1 SYNOPSIS + + package My::Class; + use Moose; + use Data::MultiValued::AttributeTrait::TagsAndRanges; + + has stuff => ( + is => 'rw', + isa => 'Int', + traits => ['MultiValued::TagsAndRanges'], + predicate => 'has_stuff', + multi_accessor => 'stuff_tagged', + multi_predicate => 'has_stuff_tagged', + ); + +=head1 DESCRIPTION + +This role consumes L<Data::MultiValued::AttributeTrait> and +specialises it to use L<Data::MultiValued::TagsAndRanges> as multi-value +storage: + +=head2 C<multivalue_storage_class> + +Returns C<'Data::MultiValued::TagsAndRanges'>. + +=head2 C<opts_to_pass_set> + +Returns C<('tag', 'from', 'to')>. + +=head2 C<opts_to_pass_get> + +Returns C<('tag', 'at')>. + +=cut + +sub multivalue_storage_class { 'Data::MultiValued::TagsAndRanges' }; +sub opts_to_pass_set { qw(from to tag) } +sub opts_to_pass_get { qw(at tag) } + +package Moose::Meta::Attribute::Custom::Trait::MultiValued::TagsAndRanges;{ +sub register_implementation { 'Data::MultiValued::AttributeTrait::TagsAndRanges' } +} + +1; |