summaryrefslogtreecommitdiff
path: root/Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm')
-rw-r--r--Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm23
1 files changed, 18 insertions, 5 deletions
diff --git a/Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm
index 32b40bb..060aa5a 100644
--- a/Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm
+++ b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm
@@ -76,14 +76,26 @@ after install_accessors => sub {
}
};
+sub _filter_opts {
+ my ($hr,@fields) = @_;
+
+ my %ret;
+ for my $f (@fields) {
+ if (exists $hr->{$f}) {
+ $ret{$f}=$hr->{$f};
+ }
+ }
+ return \%ret;
+}
+
sub load_multi_value {
my ($self,$instance,$opts) = @_;
- my %opts_passed = map { $_ => $opts->{$_} } $self->opts_to_pass_get;
+ my $opts_passed = _filter_opts($opts, $self->opts_to_pass_get);
my $value;my $found=1;
try {
- $value = $self->full_storage($instance)->get(\%opts_passed);
+ $value = $self->full_storage($instance)->get($opts_passed);
}
catch {
unless (ref($_) && $_->isa('Data::MultiValued::Exceptions::NotFound')) {
@@ -113,10 +125,11 @@ sub raw_clear_value {
sub store_multi_value {
my ($self,$instance,$opts) = @_;
- my %opts_passed = map { $_ => $opts->{$_} } $self->opts_to_pass_set;
+ my $opts_passed = _filter_opts($opts, $self->opts_to_pass_set);
+
+ $opts_passed->{value} = $self->get_raw_value($instance);
- my $value = $self->get_raw_value($instance);
- $self->full_storage($instance)->set({%opts_passed,value=>$value});
+ $self->full_storage($instance)->set($opts_passed);
}
our $dyn_opts = {};