[couchdb-glib] Allow saving _design/* or similar documents in couchdb_database_put_document



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]