summary refs log tree commit diff
path: root/lib/Net/Riak/Role/PBC/MapReduce.pm
diff options
context:
space:
mode:
authorRobin Edwards <robin.ge@gmail.com>2011-04-20 14:38:43 +0100
committerRobin Edwards <robin.ge@gmail.com>2011-04-20 14:38:43 +0100
commit79bea382fd2c0753ca9ace79a11bb74c9a1d722b (patch)
treebde42a47792a27e0a863ee527b88c8c24258f7e9 /lib/Net/Riak/Role/PBC/MapReduce.pm
parentMerge remote branch 'simon/fix_link_encoding' (diff)
downloadnet-riak-79bea382fd2c0753ca9ace79a11bb74c9a1d722b.tar.gz
merged pbc branch to master
Diffstat (limited to 'lib/Net/Riak/Role/PBC/MapReduce.pm')
-rw-r--r--lib/Net/Riak/Role/PBC/MapReduce.pm37
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/Net/Riak/Role/PBC/MapReduce.pm b/lib/Net/Riak/Role/PBC/MapReduce.pm
new file mode 100644
index 0000000..afeabe8
--- /dev/null
+++ b/lib/Net/Riak/Role/PBC/MapReduce.pm
@@ -0,0 +1,37 @@
+package Net::Riak::Role::PBC::MapReduce;
+use Moose::Role;
+use JSON;
+use List::Util 'sum';
+use Data::Dump 'pp';
+
+sub execute_job {
+    my ($self, $job, $timeout, $returned_phases) = @_;
+
+    $job->{timeout} = $timeout;
+
+    my $job_request = JSON::encode_json($job);
+
+    my $results;
+
+    my $resp = $self->send_message( MapRedReq => {
+            request => $job_request,
+            content_type => 'application/json'
+        }, sub { push @$results, $self->decode_phase(shift) }) 
+        or 
+    die "MapReduce query failed!";
+
+
+    return $returned_phases == 1 ? $results->[0] : $results;
+}
+
+sub decode_phase {
+    my ($self, $resp) = @_;
+
+    if (defined $resp->response && length($resp->response)) {
+        return JSON::decode_json($resp->response);
+    }
+
+    return;
+}
+
+1;