From 4646896ac82b4eb2ef8967766dce2123ddd5aed4 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 2 Dec 2014 17:19:30 -0800 Subject: [PATCH] [Persistence] Separate out CouchDocument Separate CouchDocument (used to wrap a domain object model with metadata suitable for persistence to CouchDB) into its own script, to simplify testing and maintenance. Ongoing transition of Couch persistence, WTD-537. --- platform/persistence/src/CouchDocument.js | 41 +++++++++++++++++++ .../src/CouchPersistenceProvider.js | 35 +++++++--------- 2 files changed, 55 insertions(+), 21 deletions(-) create mode 100644 platform/persistence/src/CouchDocument.js diff --git a/platform/persistence/src/CouchDocument.js b/platform/persistence/src/CouchDocument.js new file mode 100644 index 0000000000..c24f6e2b99 --- /dev/null +++ b/platform/persistence/src/CouchDocument.js @@ -0,0 +1,41 @@ +/*global define*/ + +define( + [], + function () { + "use strict"; + + /** + * A CouchDocument describes domain object model in a format + * which is easily read-written to CouchDB. This includes + * Couch's _id and _rev fields, as well as a sseparate + * metadata field which contains a subset of information found + * in the model itself (to support search optimization with + * CouchDB views.) + * @constructor + * @param {string} id the id under which to store this mode + * @param {object} model the model to store + * @param {string} rev the revision to include (or undefined, + * if no revision should be noted for couch) + * @param {boolean} whether or not to mark this documnet as + * deleted (see CouchDB docs for _deleted) + */ + function CouchDocument(id, model, rev, markDeleted) { + return { + "_id": id, + "_rev": rev, + "_deleted": markDeleted, + "metadata": { + "category": "domain object", + "type": model.type, + "owner": "admin", + "name": model.name, + "created": Date.now() + }, + "model": model + }; + } + + return CouchDocument; + } +); \ No newline at end of file diff --git a/platform/persistence/src/CouchPersistenceProvider.js b/platform/persistence/src/CouchPersistenceProvider.js index 85a5800ec6..06928b8327 100644 --- a/platform/persistence/src/CouchPersistenceProvider.js +++ b/platform/persistence/src/CouchPersistenceProvider.js @@ -1,8 +1,8 @@ /*global define*/ define( - [], - function () { + ["./CouchDocument"], + function (CouchDocument) { 'use strict'; function CouchPersistenceProvider($http, $q, SPACE, PATH) { @@ -25,9 +25,18 @@ define( }); } - function get(subpath) { return request(subpath, "GET"); } - function put(subpath, value) { return request(subpath, "PUT", value); } - function del(subpath, value) { return request(subpath, "DELETE", value); } + // Shorthand methods for various get types + function get(subpath) { + return request(subpath, "GET"); + } + + function put(subpath, value) { + return request(subpath, "PUT", value); + } + + function del(subpath, value) { + return request(subpath, "DELETE", value); + } function getIdsFromAllDocs(allDocs) { return allDocs.rows.map(function (r) { return r.id; }); @@ -52,22 +61,6 @@ define( } } - function CouchDocument(key, value, includeRevision, markDeleted) { - return { - "_id": key, - "_rev": includeRevision ? revs[key] : undefined, - "_deleted": markDeleted, - "metadata": { - "category": "domain object", - "type": value.type, - "owner": "admin", - "name": value.name, - "created": Date.now() - }, - "model": value - }; - } - return { listSpaces: function () { return $q.when(spaces);