diff options
Diffstat (limited to 'lib/Net/Riak/Bucket.pm')
-rw-r--r-- | lib/Net/Riak/Bucket.pm | 82 |
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 |