All files / composer-runtime-pouchdb/lib pouchdbutils.js

100% Statements 26/26
100% Branches 6/6
100% Functions 11/11
100% Lines 26/26
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109                                1x   1x                               41x 41x 41x         41x 25x 25x   41x 41x                         10x 10x 10x         10x 10x 3x   10x     10x                       8x 8x 8x         8x 1x   7x           8x           1x  
/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
'use strict';
 
const Logger = require('composer-common').Logger;
 
const LOG = Logger.getLog('PouchDBUtils');
 
/**
 * Utility functions for interacting with PouchDB.
 * @protected
 */
class PouchDBUtils {
 
    /**
     * Get a document from the database.
     * @param {PouchDB} db The database.
     * @param {string} id The document ID.
     * @return {Promise} A promise that will be resolved when complete, or rejected
     * with an error.
     */
    static getDocument(db, id) {
        const method = 'get';
        LOG.entry(method, id);
        return db.get(id)
            .catch((error) => {
                // Ignore the error.
            })
            .then((doc) => {
                if (doc) {
                    delete doc._id;
                    delete doc._rev;
                }
                LOG.exit(method, doc);
                return doc;
            });
    }
 
    /**
     * Put a document to the database.
     * @param {PouchDB} db The database.
     * @param {string} id The document ID.
     * @param {Object} doc The document.
     * @return {Promise} A promise that will be resolved when complete, or rejected
     * with an error.
     */
    static putDocument(db, id, doc) {
        const method = 'put';
        LOG.entry(method, id, doc);
        return db.get(id)
            .catch((error) => {
                // Ignore the error.
            })
            .then((existing) => {
                doc._id = id;
                if (existing) {
                    doc._rev = existing._rev;
                }
                return db.put(doc);
            })
            .then(() => {
                LOG.exit(method);
            });
    }
 
    /**
     * Remove a document from the database.
     * @param {PouchDB} db The database.
     * @param {string} id The document ID.
     * @return {Promise} A promise that will be resolved when complete, or rejected
     * with an error.
     */
    static removeDocument(db, id) {
        const method = 'remove';
        LOG.entry(method, id);
        return db.get(id)
            .catch((error) => {
                // Ignore the error.
            })
            .then((existing) => {
                if (!existing) {
                    return;
                }
                return db.remove({
                    _id: id,
                    _rev: existing._rev
                });
            })
            .then(() => {
                LOG.exit(method);
            });
    }
 
}
 
module.exports = PouchDBUtils;