package Data::Riak::Fast; use Mouse; use JSON::XS qw/decode_json/; use URI; use Data::Riak::Fast::Result; use Data::Riak::Fast::ResultSet; use Data::Riak::Fast::Bucket; use Data::Riak::Fast::MapReduce; use Data::Riak::Fast::HTTP; our $VERSION = '0.03'; has transport => ( is => 'ro', isa => 'Data::Riak::Fast::HTTP', required => 1, handles => { 'ping' => 'ping', 'base_uri' => 'base_uri', }, ); sub send_request { my ($self, $request) = @_; my ($response, $uri) = $self->transport->send($request); if ($response->is_error) { die $response; } my @parts = @{ $response->parts }; return unless @parts; return Data::Riak::Fast::ResultSet->new( { results => [ map { Data::Riak::Fast::Result->new( { riak => $self, http_message => $_, location => ( $_->header('location') ? URI->new( $_->header('location') ) : $uri ) } ); } @parts ], } ); } sub _buckets { my $self = shift; return decode_json( $self->send_request({ method => 'GET', uri => '/buckets', query => { buckets => 'true' } })->first->value ); } sub bucket { my ($self, $bucket_name) = @_; return Data::Riak::Fast::Bucket->new({ riak => $self, name => $bucket_name, }); } sub resolve_link { my ($self, $link) = @_; $self->bucket( $link->bucket )->get( $link->key ); } sub linkwalk { my ($self, $args) = @_; my $object = $args->{object} || die 'You must have an object to linkwalk'; my $bucket = $args->{bucket} || die 'You must have a bucket for the original object to linkwalk'; my $request_str = "buckets/$bucket/keys/$object/"; my $params = $args->{params}; foreach my $depth (@$params) { if(scalar @{$depth} == 2) { unshift @{$depth}, $bucket; } my ($buck, $tag, $keep) = @{$depth}; $request_str .= "$buck,$tag,$keep/"; } return $self->send_request({ method => 'GET', uri => $request_str }); } sub stats { my $self = shift; return decode_json( $self->send_request({ method => 'GET', uri => '/stats', })->first->value ); } __PACKAGE__->meta->make_immutable; no Mouse; 1; __END__ =head1 NAME Data::Riak::Fast - more fast interface to a Riak Server =head1 SYNOPSIS use Data::Riak::Fast; =head1 DESCRIPTION Data::Riak::Fast is more fast interface to a Riak Server. =head1 AUTHOR Tatsuro Hisamori Emyfinder@cpan.orgE =head1 SEE ALSO =head1 LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut