TIF_E41200642/public/dist/libs/kanban/lib/board.js

76 lines
1.6 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
var debug = require("debug")("kanban:board");
var Step = require("./step");
var Job = require("./job");
/**
* Initialize a new kanban board
*
* @api public
*/
function Board() {
this.steps = [];
this.defineStep("backlog");
}
module.exports = Board;
/**
* Defines a new step on the kanban board
*
* Options:
* - `wip`, execute this step with the specified concurrency.
*
* @api public
* @param {String} name The step name
* @param {Object} opts The options (optional)
* @param {Function} step The function that will execute the step.
* this will be called with executed object and a 'finish' callback.
* If not provided it will run a dummy one.
* @return {Board} the current object, for a fluent API
*/
Board.prototype.defineStep = function () {
var args = null, func = null, opts = null, name = null;
args = Array.prototype.slice.call(arguments, 0);
name = args.shift();
func = args.pop() || function (obj, cb) {
// this function does nothing
cb();
};
opts = args.shift() || {};
debug("Defined step " + name);
this.steps.push(new Step(name, opts, func));
return this;
};
/**
* Insert an object in the board
*
* @api public
* @param {Object} obj The task to be inserted in the board
* @param {Function} done A function that will be called
* when the task is finished.
* @return {Board} the current object, for a fluent API
*/
Board.prototype.insert = function (obj, done) {
var that = this;
debug("Inserted new job in the board");
// cloning the steps, so the Job will not consume them
var job = new Job(obj, this.steps.slice(0), done);
job.executeNext();
return this;
};