diff options
author | Robin Edwards <rge@cpan.org> | 2011-07-05 08:26:36 -0700 |
---|---|---|
committer | Robin Edwards <rge@cpan.org> | 2011-07-05 08:26:36 -0700 |
commit | b972db83aef13395f705a64d95b161c7b2de2efa (patch) | |
tree | e5fe816137512443fb399771514476cc6a372b70 /lib/Net/Riak/Role/REST | |
parent | new release adds status line on unexpected response (diff) | |
parent | fix conflict (diff) | |
download | net-riak-b972db83aef13395f705a64d95b161c7b2de2efa.tar.gz |
Merge pull request #13 from gmaurice/master
Basic support of Riaksearch
Diffstat (limited to 'lib/Net/Riak/Role/REST')
-rw-r--r-- | lib/Net/Riak/Role/REST/Search.pm | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/lib/Net/Riak/Role/REST/Search.pm b/lib/Net/Riak/Role/REST/Search.pm new file mode 100644 index 0000000..642964b --- /dev/null +++ b/lib/Net/Riak/Role/REST/Search.pm @@ -0,0 +1,74 @@ +package Net::Riak::Role::REST::Search; +use Moose::Role; +use JSON; + +sub search { + my $self = shift; + my %params = @_; + my $request; + + $request = + $self->new_request( 'GET', + [ $self->search_prefix, "select" ], \%params ) unless $params{index}; + if ( $params{index} ){ + my $index = delete $params{index}; + $request = + $self->new_request( 'GET', + [ $self->search_prefix, $index, "select" ], \%params ); + } + + my $http_response = $self->send_request($request); + + return if (!$http_response); + + my $status = $http_response->code; + if ($status == 404) { + return; + } + + return JSON::decode_json($http_response->content) if $params{wt} =~ /json/i; + $http_response->content; +}; + +sub setup_indexing { + my ( $self, $bucket ) = @_; + my $request = + $self->new_request( 'GET', + [ $self->prefix, $bucket ] ); + + my $http_response = $self->send_request($request); + + return if (!$http_response); + my $status = $http_response->code; + if ($status == 404) { + return; + } + + my $precommits = JSON::decode_json($http_response->content)->{props}->{precommit}; + + for (@$precommits){ + return JSON::decode_json($http_response->content) if $_->{mod} eq "riak_search_kv_hook"; + } + push ( @$precommits, { mod => "riak_search_kv_hook" , fun => "precommit" } ); + + $request = $self->new_request( 'PUT', [ $self->prefix, $bucket ] ); + $request->content( JSON::encode_json({ props => { precommit => $precommits } } ) ); + $request->header('Content-Type' => "application/json" ); + + $http_response = $self->send_request($request); + + return if (!$http_response); + $status = $http_response->code; + if ($status == 404) { + return; + } + $request = + $self->new_request( 'GET', + [ $self->prefix, $bucket ] ); + + $http_response = $self->send_request($request); + + JSON::decode_json($http_response->content); +} + +1; |