diff options
Diffstat (limited to 'Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm')
-rw-r--r-- | Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm | 23 |
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 = {}; |