Cluc
Command line under control, a library to ease usage of command lines.
Demo
with child_process
var Cluc = require('cluc');
var clucLine = (new Cluc())
.exec('ls -alh' , function(err,stdout,stderr){
this.confirm(/vagrant/, 'Username should display on unix.');
this.warn(/root/, 'Some files does not belong vagrant users.').or(function(err){
return new Error(err);
});
})
.stream('ls -alh' , function(err,stdout,stderr){
this.confirm(/vagrant/, 'Username should display on unix.');
this.warn(/root/, 'Some files does not belong vagrant users.');
}).stream('sudo apt-get remove apache2 -y', function(){
this.progress(/Reading (:<title>[\w\s]+)[ .]*(:<current>\d+)%/);
this.mustnot(/0 to remove/, 'no package to remove found');
this.confirm(/([1-9]+) to remove/, ' found %s package to remove');
this.success(/(Removing [^ ]+\s+[.]+)/i, 'Package removed !');
this.warn(/(Unable to locate package )/i, 'Package not found');
}).stream('sudo apt-get install apache2 -y', function(){
this.mustnot(/You should explicitly select one to install/, "too many results");
this.mustnot(/has no installation candidate/, "can not install httpd");
this.watch(/Need to get ([0-9- ,-]+ [a-z]+) of archives/i);
this.watch(/After this operation, ([0-9- ,-]+ [a-z]+) of additional disk space will be used/i);
this.spin(/((Reading|Building).+)/i);
this.spin(/^\s*([0-9]+%)/i);
this.warn(/(is already the newest version)/i, 'Already installed');
this.warn(/(0 newly installed)/i, 'Package not installed');
this.confirm(/([^ /]+)\.deb/i);
this.success(/(1 newly installed)/i, 'Package installed !');
}).download('/home/vagrant/test', __dirname+'/fixtures/test.bashrc', function(err){
if(err) log.error(err);
}).record(require('fs').createWriteStream('some/output.log'));;
var ClucProcess = Cluc.transports.process;
(new ClucProcess()).run(clucLine, done);
with ssh
var Cluc = require('cluc');
var clucLine = (new Cluc(Cluc.output.ssh))
.exec('ls -alh' , function(err,stdout,stderr){
this.confirm(/vagrant/, 'Username should display on unix.');
this.warn(/root/, 'Some files does not belong vagrant users.');
this.display();
})
.stream('ls -alh' , function(err,stdout,stderr){
this.confirm(/vagrant/, 'Username should display on unix.');
this.warn(/root/, 'Some files does not belong vagrant users.');
});
var ClucSsh = Cluc.transports.ssh;
(new ClucSsh()).run(clucLine, server, done);
API
Status
In development.
It needs some tests.
It misses putFile and readDir implementations.
Documentation update.