summaryrefslogtreecommitdiff
path: root/lib/Net/Riak/Role/REST
diff options
context:
space:
mode:
authorRobin Edwards <robin.ge@gmail.com>2013-03-01 02:04:58 -0800
committerRobin Edwards <robin.ge@gmail.com>2013-03-01 02:04:58 -0800
commit5f99cd866eb23113ea46ac78720f5608c54982ce (patch)
tree3c35ac04f3d748942c2e973e6f42164ff02e4316 /lib/Net/Riak/Role/REST
parentUpdate changelog (diff)
parent*Added secondary index support using method names from the riak python (diff)
downloadnet-riak-5f99cd866eb23113ea46ac78720f5608c54982ce.tar.gz
Merge pull request #22 from Mainframe2008/master
Secondary index support
Diffstat (limited to 'lib/Net/Riak/Role/REST')
-rw-r--r--lib/Net/Riak/Role/REST/Object.pm20
-rw-r--r--lib/Net/Riak/Role/REST/Search.pm27
2 files changed, 45 insertions, 2 deletions
diff --git a/lib/Net/Riak/Role/REST/Object.pm b/lib/Net/Riak/Role/REST/Object.pm
index fc45f3c..545e4e0 100644
--- a/lib/Net/Riak/Role/REST/Object.pm
+++ b/lib/Net/Riak/Role/REST/Object.pm
@@ -1,6 +1,7 @@
package Net::Riak::Role::REST::Object;
use Moose::Role;
+use Data::Dumper;
use JSON;
sub store_object {
@@ -32,13 +33,20 @@ sub store_object {
$request->header('link' => $self->_links_to_header($object));
}
+ if ( $object->i2indexes) {
+
+ foreach (keys %{$object->i2indexes}) {
+ $request->header(':x-riak-index-' . lc($_) => $object->i2indexes->{$_});
+ }
+ }
+
if (ref $object->data && $object->content_type eq 'application/json') {
$request->content(JSON::encode_json($object->data));
}
else {
$request->content($object->data);
}
-
+
my $response = $self->send_request($request);
$self->populate_object($object, $response, [200, 201, 204, 300]);
return $object;
@@ -75,7 +83,8 @@ sub populate_object {
$obj->exists(0);
return if (!$http_response);
-
+
+
my $status = $http_response->code;
$obj->data($http_response->content)
@@ -91,6 +100,13 @@ sub populate_object {
. (join(', ', @$expected))
. ", received: ".$http_response->status_line
}
+
+ $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($_) )
+ }
+ $HTTP::Headers::TRANSLATE_UNDERSCORE = 1;
if ($status == 404) {
$obj->clear;
diff --git a/lib/Net/Riak/Role/REST/Search.pm b/lib/Net/Riak/Role/REST/Search.pm
index b83e3d4..f813578 100644
--- a/lib/Net/Riak/Role/REST/Search.pm
+++ b/lib/Net/Riak/Role/REST/Search.pm
@@ -1,6 +1,7 @@
package Net::Riak::Role::REST::Search;
use Moose::Role;
use JSON;
+use Data::Dumper;
#ABSTRACT: Search interface
@@ -73,4 +74,30 @@ sub setup_indexing {
JSON::decode_json($http_response->content);
}
+sub index {
+ my ($self, $bucket,$index,$first, $last) = @_;
+
+ my $request;
+ my @req = ();
+
+ my $org_prefix = $self->prefix;
+ if ( defined($bucket) && defined($index) && defined($first) )
+ {
+ @req = (
+ 'buckets',
+ $bucket,
+ 'index',
+ $index,
+ $first
+ );
+
+ if ( defined($last) ) { push(@req, $last); }
+ }
+
+ $request = $self->new_request('GET', [ @req ] );
+
+ my $http_response = $self->send_request($request);
+ JSON::decode_json($http_response->content)->{keys};
+}
+
1;