Permalink
Browse files

refactor result returned by API call

  • Loading branch information...
1 parent 4a6bb24 commit b79843b62e6827e41fa72acca5fe6c0e2955aff4 @fcuny fcuny committed Apr 11, 2010
Showing with 97 additions and 60 deletions.
  1. +61 −23 lib/AnyEvent/Riak.pm
  2. +36 −37 t/basic.t
View
@@ -81,32 +81,28 @@ sub _init_callback {
sub default_cb {
my ( $self, $options ) = @_;
return sub {
- my ( $body, $headers ) = @_;
- my $status = $options->{expected} || 200;
- if ( $headers->{Status} == $status ) {
- if ( $body && $options->{json} ) {
- return JSON::decode_json( $_[0] );
- }
- else {
- return $_[0];
- }
- }else{
- # FIXME
- }
+ my $res = shift;
+ return $res;
};
}
sub is_alive {
my $self = shift;
my ( $cv, $cb ) = $self->_init_callback(@_);
- $cb = $self->default_cb( { json => 0 } ) if !$cb;
+ $cb = $self->default_cb() if !$cb;
http_request(
GET => $self->_build_uri( [qw/ping/] ),
headers => $self->_build_headers(),
sub {
- $cv->send( $cb->(@_) );
+ my ( $body, $headers ) = @_;
+ if ( $headers->{Status} == 200 ) {
+ $cv->send( $cb->(1) );
+ }
+ else {
+ $cv->send( $cb->(0) );
+ }
},
);
return $cv;
@@ -118,13 +114,19 @@ sub list_bucket {
my $options = shift;
my ( $cv, $cb ) = $self->_init_callback(@_);
- $cb = $self->default_cb( { json => 1, expected => 200 } ) if !$cb;
+ $cb = $self->default_cb() if !$cb;
http_request(
GET => $self->_build_uri( [ $self->{path}, $bucket_name ], $options ),
headers => $self->_build_headers(),
sub {
- $cv->send($cb->(@_));
+ my ($body, $headers) = @_;
+ if ($body && $headers->{Status} == 200) {
+ my $res = JSON::decode_json($body);
+ $cv->send($cb->($res));
+ }else{
+ $cv->send(undef);
+ }
}
);
return $cv;
@@ -136,14 +138,19 @@ sub set_bucket {
my $schema = shift;
my ( $cv, $cb ) = $self->_init_callback(@_);
- $cb = $self->default_cb( { json => 1, expected => 204 } ) if !$cb;
+ $cb = $self->default_cb() if !$cb;
http_request(
PUT => $self->_build_uri( [ $self->{path}, 'bucket' ] ),
headers => $self->_build_headers(),
body => JSON::encode_json($schema),
sub {
- $cv->send($cb->(@_));
+ my ($body, $headers) = @_;
+ if ($headers->{Status} == 204) {
+ $cv->send($cb->(1));
+ }else{
+ $cv->send($cb->(0));
+ }
}
);
$cv;
@@ -250,12 +257,13 @@ AnyEvent::Riak is a non-blocking riak client using C<AnyEvent>. This client allo
=item B<is_alive>
-Check if the Riak server is alive. Default callback will return 'OK'.
+Check if the Riak server is alive. If the ping is successful, 1 is returned,
+else 0.
# with callback
my $ping = $riak->is_alive(sub {
- my ($body, $headers) = @_;
- if ($body eq 'OK') {
+ my $res = shift;
+ if ($res) {
# if everything is OK
}else{
# if something is wrong
@@ -269,9 +277,39 @@ Check if the Riak server is alive. Default callback will return 'OK'.
=item B<list_bucket>
-Get the schema and key list for 'bucket'
+Get the schema and key list for 'bucket'. Possible options are:
+
+=over 2
+
+=item
- $riak->list_bucket('bucketname')->recv;
+props=[true|false] - whether to return the bucket properties
+
+=item
+
+keys=[true|false|stream] - whether to return the keys stored in the bucket
+
+=back
+
+If the operation failed, C<undef> is returned, else an hash reference
+describing the bucket is returned.
+
+ # with callback
+ my $bucket = $riak->list_bucket('bucketname', {}, sub {
+ my $struct = shift;
+ if (scalar @{$struct->{keys}}) {
+ # do something
+ }
+ });
+
+ # without callback
+ my $bucket = $riak->list_bucket(
+ 'bucketname',
+ {
+ keys => 'true',
+ props => 'false',
+ }
+ )->recv;
=item B<set_bucket>
View
@@ -26,25 +26,24 @@ ok my $riak = AnyEvent::Riak->new( host => $host, path => $path, w => 1,
# ping
ok my $ping_one = $riak->is_alive(
sub {
- pass "is alive in cb";
- return $_[0];
+ my $res = shift;
+ pass "is alive in cb" if $res;
}
), 'ping with callback';
ok my $ping_two = $riak->is_alive()->recv, 'ping without callback';
-is $ping_two, 'OK', 'valid response from ping without callback';
ok my $s = $ping_one->recv, 'response from ping without callback';
-is $s, 'OK', 'valid response from ping';
+is $s, 1, 'valid response from ping';
# list bucket
ok my $bucket_cb = $riak->list_bucket(
'bar',
- {},
+ { props => 'true', keys => 'true' },
sub {
- my $stuff = shift;
- my $res = JSON::decode_json($stuff);
- is scalar @{$res->{keys}}, 0, '0 keys in cb';
+ my $res = shift;
+ ok $res->{props};
+ is scalar @{ $res->{keys} }, 0, '0 keys in cb';
}
),
'fetch bucket list';
@@ -54,37 +53,37 @@ is scalar @{ $buckets->{keys} }, '0', 'no keys';
ok my $res_bucket = $bucket_cb->recv, 'get bucket';
-# set bucket
-ok my $new_bucket
- = $riak->set_bucket( 'foo', { props => { n_val => 2 } } )->recv,
- 'set a new bucket';
+# # set bucket
+# ok my $new_bucket
+# = $riak->set_bucket( 'foo', { props => { n_val => 2 } } )->recv,
+# 'set a new bucket';
-my $value = {
- foo => 'bar',
-};
-
-ok my $res = $riak->store('foo', 'bar', $value)->recv, 'set a new key';
-
-ok $res = $riak->fetch( 'foo', 'bar' )->recv, 'fetch our new key';
-is_deeply $res, $value, 'value is ok';
-ok $res = $riak->delete( 'foo', 'bar' )->recv, 'delete our key';
-
-ok my $store_w_cb = $riak->store(
- 'foo', 'bar3', $value, undef, undef,
- sub {
- pass "store value ok";
- $riak->fetch(
- 'foo', 'bar3', undef,
- sub {
- my $body = shift;
- is_deeply (JSON::decode_json($body), $value, 'value is ok in cb');
- }
- );
- }
-);
+# my $value = {
+# foo => 'bar',
+# };
-ok my $final_res = $store_w_cb->recv;
-$final_res->recv; # FIXME all cb should be called at this point
+# ok my $res = $riak->store('foo', 'bar', $value)->recv, 'set a new key';
+
+# ok $res = $riak->fetch( 'foo', 'bar' )->recv, 'fetch our new key';
+# is_deeply $res, $value, 'value is ok';
+# ok $res = $riak->delete( 'foo', 'bar' )->recv, 'delete our key';
+
+# ok my $store_w_cb = $riak->store(
+# 'foo', 'bar3', $value, undef, undef,
+# sub {
+# pass "store value ok";
+# $riak->fetch(
+# 'foo', 'bar3', undef,
+# sub {
+# my $body = shift;
+# is_deeply (JSON::decode_json($body), $value, 'value is ok in cb');
+# }
+# );
+# }
+# );
+
+# ok my $final_res = $store_w_cb->recv;
+# $final_res->recv; # FIXME all cb should be called at this point
# ok $res = $riak->store($value)->recv, '... set a new key';
# my $second_value = {

0 comments on commit b79843b

Please sign in to comment.