UNPKG

whisper

Version:

A task-based automation app. Leiningen style.

67 lines (66 loc) 1.89 kB
(function(){ module.exports = function(whisper){ var reNewline, summary, largest, names, padRight, repeat, taskItem, listTasks; reNewline = /\r\n|\r|\n/; summary = function(text){ return text.split(reNewline)[0]; }; largest = function(xs){ return xs.reduce(function(a, b){ switch (false) { case !(a.length > b.length): return a; default: return b; } }, ''); }; names = function(xs){ return xs.map(function(it){ return it.name; }); }; padRight = curry$(function(n, text){ return text + "" + repeat(n - text.length, ' '); }); repeat = curry$(function(n, text){ switch (false) { case !(n <= 0): return ''; default: return Array(n).join(text); } }); taskItem = curry$(function(padding, task){ return " " + padRight(padding, task.name) + " " + summary(task.description); }); listTasks = function(xs){ var tasks, res$, _, x, padding; res$ = []; for (_ in xs) { x = xs[_]; res$.push(x); } tasks = res$; padding = largest(names(tasks)).length + 5; return tasks.map(taskItem(padding)).sort(); }; return whisper.task('list', [], "Lists available tasks.", function(env){ console.log("Registered tasks:\n"); return console.log(listTasks(whisper.allTasks).join('\n')); }); }; function curry$(f, bound){ var context, _curry = function(args) { return f.length > 1 ? function(){ var params = args ? args.concat() : []; context = bound ? context || this : this; return params.push.apply(params, arguments) < f.length && arguments.length ? _curry.call(context, params) : f.apply(context, params); } : f; }; return _curry(); } }).call(this);