summary refs log tree commit diff
path: root/lib/Net/Riak/Role
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Net/Riak/Role')
-rw-r--r--lib/Net/Riak/Role/PBC.pm1
-rw-r--r--lib/Net/Riak/Role/PBC/Meta.pm24
-rw-r--r--lib/Net/Riak/Role/PBC/Object.pm9
-rw-r--r--lib/Net/Riak/Role/REST/Object.pm15
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;