From 04c994801b13d881b9a11dce6080f247af7ac1a9 Mon Sep 17 00:00:00 2001 From: Gianni Ceccarelli Date: Thu, 10 Nov 2011 12:11:38 +0000 Subject: json-ify, works everywhere MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ranges now use 'undef' instead of infs… damn json infinity is not representable in json… --- .../lib/Data/MultiValued/AttributeTrait.pm | 23 +++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm') 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 = {}; -- cgit v1.2.3