summary refs log tree commit diff
path: root/lib/Net/Riak/Object.pm
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-06-14 11:43:17 +0200
committerfranck cuny <franck@lumberjaph.net>2010-06-14 11:43:17 +0200
commit65c574e4f8c56280b75b5f51aff1fade9ce95bd8 (patch)
tree75f884b2692040b715d0b9319805d84c516c1aa6 /lib/Net/Riak/Object.pm
parentreturn self (diff)
downloadnet-riak-65c574e4f8c56280b75b5f51aff1fade9ce95bd8.tar.gz
handle links correctly
Diffstat (limited to 'lib/Net/Riak/Object.pm')
-rw-r--r--lib/Net/Riak/Object.pm45
1 files changed, 37 insertions, 8 deletions
diff --git a/lib/Net/Riak/Object.pm b/lib/Net/Riak/Object.pm
index 7dc0ab2..f6e8664 100644
--- a/lib/Net/Riak/Object.pm
+++ b/lib/Net/Riak/Object.pm
@@ -24,15 +24,16 @@ has dw => (
 );
 has content_type => (is => 'rw', isa => 'Str', default => 'application/json');
 has status       => (is => 'rw', isa => 'Int');
-has links        => (
+has links => (
     traits     => ['Array'],
     is         => 'rw',
     isa        => 'ArrayRef[Net::Riak::Link]',
     auto_deref => 1,
+    lazy       => 1,
     default    => sub { [] },
     handles    => {
-        get_links => 'elements',
-        add_links => 'push',
+        count_links => 'elements',
+        append_link => 'push',
     },
     clearer => '_clear_links',
 );
@@ -92,6 +93,13 @@ sub store {
         $request->header('X-Riack-Vclock' => $self->vclock);
     }
 
+    my $header_link = '';
+    foreach my $l ($self->links) {
+        $header_link .= ', ' if ($header_link ne '');
+        $header_link .= $l->to_link_header($self->client);
+    }
+    $request->header('link' => $header_link);
+
     if ($self->_jsonize) {
         $request->content(JSON::encode_json($self->data));
     }
@@ -101,6 +109,7 @@ sub store {
 
     my $response = $self->client->useragent->request($request);
     $self->populate($response, [200, 300]);
+    $self;
 }
 
 sub load {
@@ -114,6 +123,7 @@ sub load {
 
     my $response = $self->client->useragent->request($request);
     $self->populate($response, [200, 300, 404]);
+    $self;
 }
 
 sub delete {
@@ -137,6 +147,11 @@ sub clear {
     $self->exists(0);
 }
 
+sub has_siblings {
+    my $self = shift;
+    $self->get_siblings > 0 ? return 1 : return 0;
+}
+
 sub populate {
     my ($self, $http_response, $expected) = @_;
 
@@ -185,7 +200,17 @@ sub populate_links {
         if ($link
             =~ /\<\/([^\/]+)\/([^\/]+)\/([^\/]+)\>; ?riaktag=\"([^\']+)\"/)
         {
-            my $l = Net::Riak::Link->new($2, $3, $4);
+            my $bucket = $2;
+            my $key    = $3;
+            my $tag    = $4;
+            my $l      = Net::Riak::Link->new(
+                bucket => Net::Riak::Bucket->new(
+                    name   => $bucket,
+                    client => $self->client
+                ),
+                key => $key,
+                tag => $tag
+            );
             $self->add_link($link);
         }
     }
@@ -210,24 +235,28 @@ sub sibling {
     );
     $obj->_jsonize($self->_jsonize);
     $obj->populate($response, [200]);
-    return $obj;
+    $obj;
 }
 
 sub add_link {
     my ($self, $obj, $tag) = @_;
     my $new_link;
-    if (blessed $obj && $obj->isa('RiakLink')) {
+    if (blessed $obj && $obj->isa('Net::Riak::Link')) {
         $new_link = $obj;
     }
     else {
         $new_link = Net::Riak::Link->new(
             bucket => $self->bucket,
             key    => $self->key,
-            tag    => $tag || ''
+            tag    => $tag || $self->bucket->name,
         );
     }
     $self->remove_link($new_link);
-    $self->add_links($new_link);
+    $self->append_link($new_link);
+
+    # warn "on est bien ici ??\n";
+    # use YAML; warn Dump $new_link;
+    $self;
 }
 
 sub remove_link {