summaryrefslogtreecommitdiff
path: root/lib/Net/Riak
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Net/Riak')
-rw-r--r--lib/Net/Riak/MapReduce.pm23
-rw-r--r--lib/Net/Riak/Object.pm51
2 files changed, 43 insertions, 31 deletions
diff --git a/lib/Net/Riak/MapReduce.pm b/lib/Net/Riak/MapReduce.pm
index 03a3dd3..14e4007 100644
--- a/lib/Net/Riak/MapReduce.pm
+++ b/lib/Net/Riak/MapReduce.pm
@@ -48,10 +48,17 @@ sub add {
my $self = shift;
my $arg = shift;
+ if (ref $arg eq 'ARRAY') {
+ do{
+ $self->add_input($arg);
+ }while(my $arg = shift @_);
+ return $self;
+ }
+
if (!scalar @_) {
if (blessed($arg)) {
- $self->add_object($arg);
- } else {
+ $self->add_object($arg);
+ } else {
$self->add_bucket($arg);
}
}
@@ -246,12 +253,22 @@ The MapReduce object allows you to build up and run a map/reduce operations on R
=head2 add
-arguments: bucketname or object
+arguments: bucketname or arrays or L<Net::Riak::Object>
return: a Net::Riak::MapReduce object
Add inputs to a map/reduce operation. This method takes three different forms, depending on the provided inputs. You can specify either a RiakObject, a string bucket name, or a bucket, key, and additional arg.
+Create a MapReduce job
+
+ my $mapred = $riak->add( ["alice","p1"],["alice","p2"],["alice","p5"] );
+
+Add your inputs to a MapReduce job
+
+ $mapred->add( ["alice","p1"],["alice","p2"] );
+ $mapred->add( "alice", "p5" );
+ $mapred->add( $riak->bucket("alice")->get("p6") );
+
=head2 add_object
=head2 add_bucket_key_data
diff --git a/lib/Net/Riak/Object.pm b/lib/Net/Riak/Object.pm
index 656d71a..a012fbf 100644
--- a/lib/Net/Riak/Object.pm
+++ b/lib/Net/Riak/Object.pm
@@ -83,7 +83,7 @@ sub store {
}
my $response = $self->client->send_request($request);
- $self->populate($response, [200, 300]);
+ $self->populate($response, [200, 204, 300]);
$self;
}
@@ -219,38 +219,33 @@ sub sibling {
$obj;
}
+
+sub _build_link {
+ my ($self,$obj,$tag) = @_;
+ blessed $obj && $obj->isa('Net::Riak::Link')
+ ? $obj
+ : Net::Riak::Link->new(
+ bucket => $self->bucket,
+ key => $self->key,
+ tag => $tag || $self->bucket->name,
+ );
+}
+
+around [qw{append_link remove_link add_link}] => sub{
+ my $next = shift;
+ my $self = shift;
+ $self->$next($self->_build_link(@_));
+};
+
sub add_link {
- my ($self, $obj, $tag) = @_;
- my $new_link;
- if (blessed $obj && $obj->isa('Net::Riak::Link')) {
- $new_link = $obj;
- }
- else {
- $new_link = Net::Riak::Link->new(
- bucket => $self->bucket,
- key => $self->key,
- tag => $tag || $self->bucket->name,
- );
- }
- $self->remove_link($new_link);
- $self->append_link($new_link);
+ my ($self, $link) = @_;
+ $self->remove_link($link);
+ $self->append_link($link);
$self;
}
sub remove_link {
- my ($self, $obj, $tag) = @_;
- my $new_link;
- if (blessed $obj && $obj->isa('Net::Riak::Link')) {
- $new_link = $obj;
- }
- else {
- $new_link = Net::Riak::Link->new(
- bucket => $self->bucket,
- key => $self->key,
- tag => $tag || ''
- );
- }
-
+ my ($self, $link) = @_;
# XXX purge links!
}