package POE::Component::Client::CouchDB; use POE qw(Component::Client::REST::JSON); use Moose; our $VERSION = '0.05'; has rest => ( is => 'ro', isa => 'POE::Component::Client::REST::JSON', handles => [qw(shutdown)], default => sub { POE::Component::Client::REST::JSON->new(Alias => "$_[0]-REST") }, ); has host => ( is => 'ro', isa => 'Str', default => 'localhost' ); has port => ( is => 'ro', isa => 'Int', default => 5984, ); sub call { my ($self, $method, $path, @rest) = @_; my ($host, $port) = ($self->host, $self->port); $self->rest->call($method, "http://$host:$port/$path", @rest); } sub all_dbs { my ($self, @opt) = @_; $self->call(GET => _all_dbs => @opt); } sub create_db { my ($self, $name, @opt) = @_; $self->call(PUT => $name, @opt); } sub delete_db { my ($self, $name, @opt) = @_; $self->call(DELETE => $name, @opt); } sub db_info { my ($self, $name, @opt) = @_; $self->call(GET => $name, @opt); } sub database { my ($self, $name) = @_; require POE::Component::Client::CouchDB::Database; return POE::Component::Client::CouchDB::Database->new( couch => $self, name => $name, ); } __PACKAGE__->meta->add_method(db => \&database); 1; __END__ =head1 NAME POE::Component::Client::CouchDB - Asynchronous CouchDB server interaction =head1 VERSION Version 0.05 =head1 SYNOPSIS This class makes use of L to provide an asynchronous interface to the CouchDB REST API. All methods use L to make the request, and follow its calling convention. use POE qw(Component::Client::CouchDB); my $alias = 'Huzzah!'; POE::Session->create(inline_states => { _start => sub { $poe_kernel->alias_set($alias); my $couch = POE::Component::Client::CouchDB->new; $couch->create_db('foobar', callback => [$alias, 'db_created']); }, db_created => sub { my ($data, $response) = @_[ARG0..ARG1]; use YAML; print Dump($data); $poe_kernel->alias_remove($alias); }, }); $poe_kernel->run(); =head1 ATTRIBUTES =over 4 =item rest You can optionally supply a configured L object to be used, but by default one will be created (you can also get this one to pass to another DB object... C<->new(rest => $old->rest)>) =item host The hostname of the CouchDB server. Defaults to localhost. =item port The port of the CouchDB server. Defaults to 5984. =back =head1 METHODS Note that all of these methods take a callback keyword argument (CODE or [session, state]) as their last argument except where otherwise noted. =over 4 =item call I This is L's call with the url part partially filled in - use a path instead (such as "_all_dbs"). You shouldn't need to use this directly, so don't. =item all_dbs =item create_db I =item delete_db I =item db_info I These all do what you would expect according to the CouchDB documentation. See L. =item database I =item db I Returns a new L representing the database with the specified name. This method does not follow the REST calling conventions, cause it's not a REST call! =item shutdown Equivalent to $obj->rest->shutdown(); =back =head1 AUTHOR Paul Driver, C<< >> =head1 BUGS Probably. =head1 COPYRIGHT & LICENSE Copyright 2008 Paul Driver This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.