summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/AnyEvent/Riak/Bucket.pm91
-rw-r--r--lib/AnyEvent/Riak/Object.pm20
2 files changed, 111 insertions, 0 deletions
diff --git a/lib/AnyEvent/Riak/Bucket.pm b/lib/AnyEvent/Riak/Bucket.pm
new file mode 100644
index 0000000..0ab1e94
--- /dev/null
+++ b/lib/AnyEvent/Riak/Bucket.pm
@@ -0,0 +1,91 @@
+package AnyEvent::Riak::Bucket;
+
+use Moose;
+use AnyEvent::HTTP;
+
+with qw/
+  AnyEvent::Riak::Role::CVCB
+  AnyEvent::Riak::Role::HTTPUtils
+  /;
+
+has _client => (is => 'rw', isa => 'AnyEvent::Riak', required => 1);
+has name    => (is => 'rw', isa => 'Str',            required => 1);
+has _properties =>
+  (is => 'rw', isa => 'HashRef', predicate => '_has_properties');
+has r       => (
+    is      => 'rw',
+    isa     => 'Int',
+    lazy    => 1,
+    default => sub { my $self = shift; $self->_client->r }
+);
+has w => (
+    is      => 'rw',
+    isa     => 'Int',
+    lazy    => 1,
+    default => sub { my $self = shift; $self->_client->w }
+);
+has dw => (
+    is      => 'rw',
+    isa     => 'Int',
+    lazy    => 1,
+    default => sub { my $self = shift; $self->_client->dw }
+);
+
+sub get_properties {
+    my ($self, %options) = @_;
+
+    my ($cv, $cb) = $self->cvcb(\%options);
+
+    if ($self->_has_properties) {
+        $cv->send($self->_properties);
+    }
+    else {
+        http_request(
+            GET => $self->_build_uri(
+                $self->_client->host, [$self->_client->path, $self->name],
+                $options{params}
+            ),
+            headers => $self->_build_headers($options{params}),
+            sub {
+                my ($body, $headers) = @_;
+                if ($body && $headers->{Status} == 200) {
+                    my $prop = JSON::decode_json($body);
+                    $self->_properties($prop);
+                    $cv->send($cb->($self->_properties));
+                }
+                else {
+                    $cv->send(undef);
+                }
+            }
+        );
+    }
+    return $cv;
+}
+
+sub set_properties {
+}
+
+sub create {
+    my ($self, $key, $content) = @_;
+    my $object = AnyEvent::Riak::Object->new(
+        _client => $self->_client,
+        key     => $key,
+        content => $content,
+        bucket  => $self,
+    );
+    return $object;
+}
+
+sub get {
+    my ($self, $key, $r) = @_;
+    my $obj = AnyEvent::Riak::Object->new(
+        client => $self->_client,
+        key    => $key,
+        r      => $r,
+        bucket => $self,
+    )->get;
+}
+
+no Moose;
+
+1;
diff --git a/lib/AnyEvent/Riak/Object.pm b/lib/AnyEvent/Riak/Object.pm
new file mode 100644
index 0000000..f756af4
--- /dev/null
+++ b/lib/AnyEvent/Riak/Object.pm
@@ -0,0 +1,20 @@
+package AnyEvent::Riak::Object;
+
+use Moose;
+
+has _client => (is => 'rw', isa => 'AnyEvent::Riak', requid => 1);
+has key     => (is => 'rw', isa => 'Str');
+has content => (is => 'rw', isa => 'HashRef');
+has content_type => (is => 'rw', isa => 'Str', default => 'application/json');
+has bucket => (is => 'rw', isa => 'AnyEvent::Riak::Bucket', required => 1);
+has status => (is => 'rw', isa => 'Int');
+has r      => (is => 'rw', isa => 'Int');
+
+sub get {
+    my ($self) = @_;
+    $self->_client->http_get($self->bucket_name, $self->key, $self->r);
+}
+
+no Moose;
+
+1;