Demo for query storing
Change-Id: I947bcac841992c3f6cfd01ab337c265b0d01cb70
diff --git a/node_modules/coa/lib/coaobject.js b/node_modules/coa/lib/coaobject.js
new file mode 100644
index 0000000..4601fcd
--- /dev/null
+++ b/node_modules/coa/lib/coaobject.js
@@ -0,0 +1,101 @@
+/* eslint-disable class-methods-use-this */
+'use strict';
+
+const Q = require('q');
+
+/**
+ * COA Object
+ *
+ * Base class for all COA-related objects
+ *
+ * --------|-----|-----|-----
+ * | Cmd | Opt | Arg
+ * --------|-----|-----|-----
+ * name | ✓ | ✓ | ✓
+ * title | ✓ | ✓ | ✓
+ * comp | ✓ | ✓ | ✓
+ * reject | ✓ | ✓ | ✓
+ * end | ✓ | ✓ | ✓
+ * apply | ✓ | ✓ | ✓
+ *
+ * @class CoaObject
+ */
+module.exports = class CoaObject {
+ constructor(cmd) {
+ this._cmd = cmd;
+ this._name = null;
+ this._title = null;
+ this._comp = null;
+ }
+
+ /**
+ * Set a canonical identifier to be used anywhere in the API.
+ *
+ * @param {String} name - command, option or argument name
+ * @returns {COA.CoaObject} - this instance (for chainability)
+ */
+ name(name) {
+ this._name = name;
+ return this;
+ }
+
+ /**
+ * Set a long description to be used anywhere in text messages.
+ * @param {String} title - human readable entity title
+ * @returns {COA.CoaObject} - this instance (for chainability)
+ */
+ title(title) {
+ this._title = title;
+ return this;
+ }
+
+ /**
+ * Set custom additional completion for current object.
+ *
+ * @param {Function} comp - completion generation function,
+ * invoked in the context of object instance.
+ * Accepts parameters:
+ * - {Object} opts - completion options
+ * It can return promise or any other value threated as a result.
+ * @returns {COA.CoaObject} - this instance (for chainability)
+ */
+ comp(comp) {
+ this._comp = comp;
+ return this;
+ }
+
+ /**
+ * Apply function with arguments in a context of object instance.
+ *
+ * @param {Function} fn - body
+ * @param {Array.<*>} args... - arguments
+ * @returns {COA.CoaObject} - this instance (for chainability)
+ */
+ apply(fn) {
+ arguments.length > 1?
+ fn.apply(this, [].slice.call(arguments, 1))
+ : fn.call(this);
+
+ return this;
+ }
+
+ /**
+ * Return reject of actions results promise with error code.
+ * Use in .act() for return with error.
+ * @param {Object} reason - reject reason
+ * You can customize toString() method and exitCode property
+ * of reason object.
+ * @returns {Q.promise} rejected promise
+ */
+ reject(reason) {
+ return Q.reject(reason);
+ }
+
+ /**
+ * Finish chain for current subcommand and return parent command instance.
+ * @returns {COA.Cmd} parent command
+ */
+ end() {
+ return this._cmd;
+ }
+};