whisper
Version:
A task-based automation app. Leiningen style.
67 lines (66 loc) • 1.89 kB
JavaScript
(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);