Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including cluc with all npm packages installed. Try it out:

var cluc = require("cluc")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

cluc v1.0.45

command line under control

Cluc

Command line under control, a library to ease usage of command lines.

Demo

with child_process

    var Cluc = require('cluc');

    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 !');
          //this.redo(2);
          //this.display();
          
        }).download('/home/vagrant/test', __dirname+'/fixtures/test.bashrc', function(err){
           if(err) log.error(err);
           
        }).record(require('fs').createWriteStream('some/output.log'))
        
        .run( new Cluc.transports.process(), function(){
          console.log('done');
        });

with ssh

    var Cluc = require('cluc');

    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.');
        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.');
      })
      .run( new Cluc.transports.ssh(server), function(){
        console.log('done');
      });

API

Cluc

Cluc.transports

Cluc.output

Cluc.rules

ClucChildProcess

ClucContext

ClucSsh

ClucSSHContext

ClucRule

ClucMust

ClucSuccess

ClucMustNot

ClucConfirm

ClucWarn

ClucWatch

ClucAnswer

ClucDisplay


Status

In development. It needs some tests. It misses putFile and readDir implementations. Documentation update.

Metadata

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free