summary refs log tree commit diff
path: root/lib/Net/Riak/Bucket.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Net/Riak/Bucket.pm')
-rw-r--r--lib/Net/Riak/Bucket.pm82
1 files changed, 15 insertions, 67 deletions
diff --git a/lib/Net/Riak/Bucket.pm b/lib/Net/Riak/Bucket.pm
index 2bc334e..19f5d94 100644
--- a/lib/Net/Riak/Bucket.pm
+++ b/lib/Net/Riak/Bucket.pm
@@ -1,16 +1,14 @@
 package Net::Riak::Bucket;
-
-# ABSTRACT: Access and change information about a Riak bucket
-
-use JSON;
 use Moose;
-use Carp;
 use Net::Riak::Object;
-
+use Net::Riak::Types Client => {-as => 'Client_T'};
 with 'Net::Riak::Role::Replica' => {keys => [qw/r w dw/]};
-with 'Net::Riak::Role::Base' => {
-    classes => [{ name => 'client', required => 1, }]
-};
+
+has client => (
+    is       => 'rw',
+    isa      => Client_T,
+    required => 1,
+);
 
 has name => (
     is       => 'ro',
@@ -37,20 +35,17 @@ sub allow_multiples {
     my $self = shift;
 
     if (my $val = shift) {
-        my $bool = ($val == 1 ? JSON::true : JSON::false);
+        my $bool = ($val == 1 ? 1 : 0);
         $self->set_property('allow_mult', $bool);
     }
     else {
-        return $self->get_property('allow_mult');
+        return $self->get_property('allow_mult') ? 1 : 0;
     }
 }
 
 sub get_keys {
     my ($self, $params) = @_;
-    my $key_mode = delete($params->{stream}) ? 'stream' : 'true';
-    $params = { props => 'false', keys => $key_mode, %$params };
-    my $properties = $self->get_properties($params);
-    return $properties->{keys};
+    $self->client->get_keys($self->name, $params);
 }
 
 sub get {
@@ -66,12 +61,12 @@ sub get {
 }
 
 sub delete_object {
-    my ($self, $key) = @_;
+    my ($self, $key, $dw) = @_;
     Net::Riak::Object->new(
         client => $self->client,
         bucket => $self,
         key    => $key
-    )->delete;
+    )->delete($dw);
 }
 
 sub set_property {
@@ -87,59 +82,12 @@ sub get_property {
 
 sub get_properties {
     my ($self, $params) = @_;
-
-    # Callbacks require stream mode
-    $params->{keys}  = 'stream' if $params->{cb};
-
-    $params->{props} = 'true'  unless exists $params->{props};
-    $params->{keys}  = 'false' unless exists $params->{keys};
-
-    my $request = $self->client->new_request(
-        'GET', [$self->client->prefix, $self->name], $params
-    );
-
-    my $response = $self->client->send_request($request);
-
-    unless ($response->is_success) {
-        die "Error getting bucket properties: ".$response->status_line."\n";
-    }
-
-    if ($params->{keys} ne 'stream') {
-        return JSON::decode_json($response->content);
-    }
-
-    # In streaming mode, aggregate keys from the multiple returned chunk objects
-    else {
-        my $json = JSON->new;
-        my $props = $json->incr_parse($response->content);
-        if ($params->{cb}) {
-            while (defined(my $obj = $json->incr_parse)) {
-                $params->{cb}->($_) foreach @{$obj->{keys}};
-            }
-            return %$props ? { props => $props } : {};
-        }
-        else {
-            my @keys = map { $_->{keys} && ref $_->{keys} eq 'ARRAY' ? @{$_->{keys}} : () }
-                $json->incr_parse;
-            return { props => $props, keys => \@keys };
-        }
-    }
+    $self->client->get_properties($self->name, $params);
 }
 
 sub set_properties {
     my ($self, $props) = @_;
-
-    my $request = $self->client->new_request(
-        'PUT', [$self->client->prefix, $self->name]
-    );
-
-    $request->header('Content-Type' => $self->content_type);
-    $request->content(JSON::encode_json({props => $props}));
-
-    my $response = $self->client->send_request($request);
-    unless ($response->is_success) {
-        die "Error setting bucket properties: ".$response->status_line."\n";
-    }
+    $self->client->set_properties($self, $props);
 }
 
 sub new_object {
@@ -169,7 +117,7 @@ sub new_object {
     my $obj2 = $bucket->new_object('foo2', {...});
     $object->store;
 
-    $bucket->delete_object($key);
+    $bucket->delete_object($key, 3); # optional w val
 
 =head1 DESCRIPTION