diff options
Diffstat (limited to 'lib/Net/Riak/Role')
-rw-r--r-- | lib/Net/Riak/Role/PBC.pm | 1 | ||||
-rw-r--r-- | lib/Net/Riak/Role/PBC/Meta.pm | 24 | ||||
-rw-r--r-- | lib/Net/Riak/Role/PBC/Object.pm | 9 | ||||
-rw-r--r-- | lib/Net/Riak/Role/REST/Object.pm | 15 |
4 files changed, 46 insertions, 3 deletions
diff --git a/lib/Net/Riak/Role/PBC.pm b/lib/Net/Riak/Role/PBC.pm index bc32e3b..775976e 100644 --- a/lib/Net/Riak/Role/PBC.pm +++ b/lib/Net/Riak/Role/PBC.pm @@ -8,6 +8,7 @@ with qw( Net::Riak::Role::PBC::Bucket Net::Riak::Role::PBC::MapReduce Net::Riak::Role::PBC::Link + Net::Riak::Role::PBC::Meta Net::Riak::Role::PBC::Object); use Net::Riak::Types 'Socket'; diff --git a/lib/Net/Riak/Role/PBC/Meta.pm b/lib/Net/Riak/Role/PBC/Meta.pm new file mode 100644 index 0000000..b04ec81 --- /dev/null +++ b/lib/Net/Riak/Role/PBC/Meta.pm @@ -0,0 +1,24 @@ +package Net::Riak::Role::PBC::Meta; + +use Moose::Role; + +sub _populate_metas { + my ($self, $object, $metas) = @_; + + for my $meta (@$metas) { + $object->set_meta( $meta->key, $meta->value ); + } +} + +sub _metas_for_message { + my ($self, $object) = @_; + + my @out; + while ( my ( $k, $v ) = each %{ $object->metadata } ) { + push @out, { key => $k, value => $v }; + } + return \@out; + +} + +1; diff --git a/lib/Net/Riak/Role/PBC/Object.pm b/lib/Net/Riak/Role/PBC/Object.pm index f1a82a5..280956c 100644 --- a/lib/Net/Riak/Role/PBC/Object.pm +++ b/lib/Net/Riak/Role/PBC/Object.pm @@ -16,13 +16,16 @@ sub store_object { my $content = { content_type => $object->content_type, value => $value, - usermeta => undef }; if ($object->has_links) { $content->{links} = $self->_links_for_message($object); } + if ($object->has_meta) { + $content->{usermeta} = $self->_metas_for_message($object); + } + $self->send_message( PutReq => { bucket => $object->bucket->name, @@ -87,6 +90,10 @@ sub populate_object { $self->_populate_links($object, $content->links); } + if($content->usermeta) { + $self->_populate_metas($object, $content->usermeta); + } + my $data = ($object->content_type eq 'application/json') ? JSON::decode_json($content->value) : $content->value; diff --git a/lib/Net/Riak/Role/REST/Object.pm b/lib/Net/Riak/Role/REST/Object.pm index e3341b3..6c0aa7e 100644 --- a/lib/Net/Riak/Role/REST/Object.pm +++ b/lib/Net/Riak/Role/REST/Object.pm @@ -32,6 +32,12 @@ sub store_object { $request->header('link' => $self->_links_to_header($object)); } + if ($object->has_meta) { + while ( my ( $k, $v ) = each %{ $object->metadata } ) { + $request->header('x-riak-meta-' . lc($k) => $v ); + } + } + if ($object->i2indexes) { foreach (keys %{$object->i2indexes}) { $request->header(':x-riak-index-' . lc($_) => $object->i2indexes->{$_}); @@ -101,8 +107,13 @@ sub populate_object { $HTTP::Headers::TRANSLATE_UNDERSCORE = 0; foreach ($http_response->header_field_names) { - next unless /^X-Riak-Index-(.+_bin)$/ || /^X-Riak-Index-(.+_int)$/; - $obj->add_index(lc($1), $http_response->header($_)) + + if ( /^X-Riak-Index-(.+_bin)$/ || /^X-Riak-Index-(.+_int)$/ ) { + $obj->add_index(lc($1), $http_response->header($_)) + } + elsif ( /^X-Riak-Meta-(.+)$/ ) { + $obj->set_meta(lc($1), $http_response->header($_)); + } } $HTTP::Headers::TRANSLATE_UNDERSCORE = 1; |