summaryrefslogtreecommitdiff
path: root/Data-MultiValued/lib/Data
diff options
context:
space:
mode:
Diffstat (limited to 'Data-MultiValued/lib/Data')
-rw-r--r--Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm10
-rw-r--r--Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Ranges.pm14
-rw-r--r--Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Tags.pm2
-rw-r--r--Data-MultiValued/lib/Data/MultiValued/AttributeTrait/TagsAndRanges.pm14
4 files changed, 38 insertions, 2 deletions
diff --git a/Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm
index 263ce55..32b40bb 100644
--- a/Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm
+++ b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm
@@ -14,6 +14,8 @@ has 'full_storage_slot' => (
sub _build_full_storage_slot { shift->name . '__MULTIVALUED_STORAGE__' }
requires 'multivalue_storage_class';
+requires 'opts_to_pass_set';
+requires 'opts_to_pass_get';
around slots => sub {
my ($orig, $self) = @_;
@@ -77,9 +79,11 @@ after install_accessors => sub {
sub load_multi_value {
my ($self,$instance,$opts) = @_;
+ my %opts_passed = map { $_ => $opts->{$_} } $self->opts_to_pass_get;
+
my $value;my $found=1;
try {
- $value = $self->full_storage($instance)->get($opts);
+ $value = $self->full_storage($instance)->get(\%opts_passed);
}
catch {
unless (ref($_) && $_->isa('Data::MultiValued::Exceptions::NotFound')) {
@@ -109,8 +113,10 @@ sub raw_clear_value {
sub store_multi_value {
my ($self,$instance,$opts) = @_;
+ my %opts_passed = map { $_ => $opts->{$_} } $self->opts_to_pass_set;
+
my $value = $self->get_raw_value($instance);
- $self->full_storage($instance)->set({%$opts,value=>$value});
+ $self->full_storage($instance)->set({%opts_passed,value=>$value});
}
our $dyn_opts = {};
diff --git a/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Ranges.pm b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Ranges.pm
new file mode 100644
index 0000000..8d93578
--- /dev/null
+++ b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Ranges.pm
@@ -0,0 +1,14 @@
+package Data::MultiValued::AttributeTrait::Ranges;
+use Moose::Role;
+use Data::MultiValued::Ranges;
+with 'Data::MultiValued::AttributeTrait';
+
+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/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Tags.pm b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Tags.pm
index fff5776..7cffb33 100644
--- a/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Tags.pm
+++ b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Tags.pm
@@ -4,6 +4,8 @@ use Data::MultiValued::Tags;
with 'Data::MultiValued::AttributeTrait';
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' }
diff --git a/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/TagsAndRanges.pm b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/TagsAndRanges.pm
new file mode 100644
index 0000000..e0c56cd
--- /dev/null
+++ b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/TagsAndRanges.pm
@@ -0,0 +1,14 @@
+package Data::MultiValued::AttributeTrait::TagsAndRanges;
+use Moose::Role;
+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) }
+
+package Moose::Meta::Attribute::Custom::Trait::MultiValued::TagsAndRanges;{
+sub register_implementation { 'Data::MultiValued::AttributeTrait::TagsAndRanges' }
+}
+
+1;