[couchdb-glib] Allow saving _design/* or similar documents in couchdb_database_put_document
- From: Rodrigo Moya <rodrigo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [couchdb-glib] Allow saving _design/* or similar documents in couchdb_database_put_document
- Date: Mon, 22 Aug 2011 16:01:24 +0000 (UTC)
commit c512319a897f565d7732e79aa23a04b6744dfe15
Author: Rodrigo Moya <rodrigo gnome-db org>
Date: Mon Aug 22 18:00:01 2011 +0200
Allow saving _design/* or similar documents in couchdb_database_put_document
Based on initial work by MosÃs Palmer (https://bugs.launchpad.net/couchdb-glib/+bug/830269)
couchdb-glib/couchdb-database.c | 20 +++++++++++++++++---
1 files changed, 17 insertions(+), 3 deletions(-)
---
diff --git a/couchdb-glib/couchdb-database.c b/couchdb-glib/couchdb-database.c
index 3a945ff..12921e3 100644
--- a/couchdb-glib/couchdb-database.c
+++ b/couchdb-glib/couchdb-database.c
@@ -638,10 +638,24 @@ couchdb_database_put_document (CouchdbDatabase *database,
body = couchdb_document_to_string (document);
parser = json_parser_new ();
if (id) {
- char *encoded_docid;
+ char *encoded_docid, **special_name_parts;
+
+ /* Allow one sub-level in the ID string for i. e. design documents */
+ special_name_parts = *id == '_' ? g_strsplit (id, "/", 2) : NULL;
+ if (special_name_parts == NULL) {
+ encoded_docid = soup_uri_encode (id, NULL);
+ url = g_strdup_printf ("%s/%s/%s", couchdb_session_get_uri (database->priv->session), database->priv->dbname, encoded_docid);
+ }
+ else {
+ encoded_docid = soup_uri_encode (special_name_parts[1], NULL);
+ url = g_strdup_printf ("%s/%s/%s/%s",
+ couchdb_session_get_uri (database->priv->session),
+ database->priv->dbname,
+ special_name_parts[0],
+ encoded_docid);
+ g_strfreev (special_name_parts);
+ }
- encoded_docid = soup_uri_encode (id, NULL);
- url = g_strdup_printf ("%s/%s/%s", couchdb_session_get_uri (database->priv->session), database->priv->dbname, encoded_docid);
send_ok = couchdb_session_send_message (database->priv->session, SOUP_METHOD_PUT, url, body, parser, error);
g_free (encoded_docid);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]