diff --git a/jio.js b/jio.js index dc6f0a34add7939d166b8abf7af3f33f2a4d2375..719a8247d281058aab730b2d909ab4f45523fc87 100644 --- a/jio.js +++ b/jio.js @@ -268,6 +268,18 @@ var storage = function (spec, my) { }); }; + that.check = function (command) { + setTimeout(function () { + that.success({"ok": true, "id": command.getDocId()}); + }); + }; + + that.repair = function (command) { + setTimeout(function () { + that.success({"ok": true, "id": command.getDocId()}); + }); + }; + that.success = function () {}; that.retry = function () {}; that.error = function () {}; @@ -323,10 +335,48 @@ var allDocsCommand = function (spec, my) { return that; }; +/*jslint indent: 2, maxlen: 80, sloppy: true */ +/*global command: true */ +var checkCommand = function (spec, my) { + var that = command(spec, my); + spec = spec || {}; + my = my || {}; + + // Methods // + that.getLabel = function () { + return 'check'; + }; + + that.validateState = function () { + if (!(typeof that.getDocId() === "string" && that.getDocId() !== + "")) { + that.error({ + "status": 20, + "statusText": "Document Id Required", + "error": "document_id_required", + "message": "The document id is not provided", + "reason": "Document id is undefined" + }); + return false; + } + return true; + }; + + that.executeOn = function (storage) { + storage.check(that); + }; + + that.canBeRestored = function () { + return false; + }; + + return that; +}; /*jslint indent: 2, maxlen: 80, sloppy: true, nomen: true */ /*global postCommand: true, putCommand: true, getCommand: true, removeCommand: true, allDocsCommand: true, putAttachmentCommand: true, failStatus: true, doneStatus: true, + checkCommand: true, repairCommand: true, hex_md5: true */ var command = function (spec, my) { var that = {}, @@ -341,7 +391,9 @@ var command = function (spec, my) { 'get': getCommand, 'remove': removeCommand, 'allDocs': allDocsCommand, - 'putAttachment': putAttachmentCommand + 'putAttachment': putAttachmentCommand, + 'check': checkCommand, + 'repair': repairCommand }; // creates the good command thanks to his label if (spec.label && priv.commandlist[spec.label]) { @@ -876,6 +928,37 @@ var removeCommand = function (spec, my) { return that; }; /*jslint indent: 2, maxlen: 80, sloppy: true */ +/*global command: true */ +var repairCommand = function (spec, my) { + var that = command(spec, my); + spec = spec || {}; + my = my || {}; + + // Methods // + that.getLabel = function () { + return 'repair'; + }; + + that.validateState = function () { + if (!(typeof that.getDocId() === "string" && that.getDocId() !== + "")) { + that.error({ + "status": 20, + "statusText": "Document Id Required", + "error": "document_id_required", + "message": "The document id is not provided", + "reason": "Document id is undefined" + }); + return false; + } + return true; + }; + that.executeOn = function (storage) { + storage.repair(that); + }; + return that; +}; +/*jslint indent: 2, maxlen: 80, sloppy: true */ /*global jobStatus: true */ var doneStatus = function (spec, my) { var that = jobStatus(spec, my); @@ -2075,7 +2158,7 @@ var jobRules = (function () { storage_type_object: true, invalidStorageType: true, jobRules: true, job: true, postCommand: true, putCommand: true, getCommand:true, allDocsCommand: true, putAttachmentCommand: true, - removeCommand: true */ + removeCommand: true, checkCommand: true, repairCommand: true */ // Class jio var that = {}, priv = {}, jio_id_array_name = 'jio/id_array'; spec = spec || {}; @@ -2448,10 +2531,10 @@ Object.defineProperty(that, "allDocs", { * Put an attachment to a document. * @method putAttachment * @param {object} doc The document object. Contains at least: - * - {string} id The document id: "doc_id/attchment_id" - * - {string} data Base64 attachment data - * - {string} mimetype The attachment mimetype - * - {string} rev The attachment revision + * - {string} _id The document id: "doc_id/attchment_id" + * - {string} _data Base64 attachment data + * - {string} _mimetype The attachment mimetype + * - {string} _rev The attachment revision * @param {object} options (optional) Contains some options: * - {number} max_retry The number max of retries, 0 = infinity. * - {boolean} revs Include revision history of the document. @@ -2479,6 +2562,66 @@ Object.defineProperty(that, "putAttachment", { }); } }); + +/** + * Check a document. + * @method check + * @param {object} doc The document object. Contains at least: + * - {string} _id The document id + * @param {object} options (optional) Contains some options: + * - {number} max_retry The number max of retries, 0 = infinity. + * @param {function} callback (optional) The callback(err,response). + * @param {function} error (optional) The callback on error, if this + * callback is given in parameter, "callback" is changed as "success", + * called on success. + */ +Object.defineProperty(that, "check", { + configurable: false, + enumerable: false, + writable: false, + value: function (doc, options, success, callback) { + var param = priv.parametersToObject( + [options, success, callback], + {max_retry: 3} + ); + + priv.addJob(checkCommand, { + doc: doc, + options: param.options, + callbacks: {success: param.success, error: param.error} + }); + } +}); + +/** + * Repair a document. + * @method repair + * @param {object} doc The document object. Contains at least: + * - {string} _id The document id + * @param {object} options (optional) Contains some options: + * - {number} max_retry The number max of retries, 0 = infinity. + * @param {function} callback (optional) The callback(err,response). + * @param {function} error (optional) The callback on error, if this + * callback is given in parameter, "callback" is changed as "success", + * called on success. + */ +Object.defineProperty(that, "repair", { + configurable: false, + enumerable: false, + writable: false, + value: function (doc, options, success, callback) { + var param = priv.parametersToObject( + [options, success, callback], + {max_retry: 3} + ); + + priv.addJob(repairCommand, { + doc: doc, + options: param.options, + callbacks: {success: param.success, error: param.error} + }); + } +}); return that; }; // End Class jio /*jslint indent: 2, maxlen: 80, sloppy: true */