| 'use strict'; |
| |
| module.exports = TaskQueue; |
| |
| function TaskQueue() { |
| this.isReady = false; |
| this.failed = false; |
| this.queue = []; |
| } |
| |
| TaskQueue.prototype.execute = function () { |
| var d, func; |
| if (this.failed) { |
| while ((d = this.queue.shift())) { |
| if (typeof d === 'function') { |
| d(this.failed); |
| continue; |
| } |
| func = d.parameters[d.parameters.length - 1]; |
| if (typeof func === 'function') { |
| func(this.failed); |
| } else if (d.name === 'changes' && typeof func.complete === 'function') { |
| func.complete(this.failed); |
| } |
| } |
| } else if (this.isReady) { |
| while ((d = this.queue.shift())) { |
| |
| if (typeof d === 'function') { |
| d(); |
| } else { |
| d.task = this.db[d.name].apply(this.db, d.parameters); |
| } |
| } |
| } |
| }; |
| |
| TaskQueue.prototype.fail = function (err) { |
| this.failed = err; |
| this.execute(); |
| }; |
| |
| TaskQueue.prototype.ready = function (db) { |
| if (this.failed) { |
| return false; |
| } else if (arguments.length === 0) { |
| return this.isReady; |
| } |
| this.isReady = db ? true: false; |
| this.db = db; |
| this.execute(); |
| }; |
| |
| TaskQueue.prototype.addTask = function (name, parameters) { |
| if (typeof name === 'function') { |
| this.queue.push(name); |
| if (this.failed) { |
| this.execute(); |
| } |
| } else { |
| var task = { name: name, parameters: parameters }; |
| this.queue.push(task); |
| if (this.failed) { |
| this.execute(); |
| } |
| return task; |
| } |
| }; |