Last Updated: February 25, 2016
·
1.123K
· phaus

Creating "gem install" commands from a given "gem list" output

#!/usr/bin/node

var sys = require('sys')
var exec = require('child_process').exec;
var child;

function getGemInfo(stdout){
    var lines = stdout.split("\n");
    var line, version, name, d, gem;
    for(var i in lines){
        line = lines[i];
        if(line){
            gem = {};
            d = line.indexOf("(");
            gem.name = line.substring(0,d).replace(" ","").replace("\n","");
            gem.versions = getVersions(line.substring(d+1).replace(")",""))
            console.log(createGemCommand(gem));
        }
    }
}

function getVersions(part){
    var versions = part.split(",");
    for(var i in versions){
        versions[i] = versions[i].replace(" ","").replace("\n","");
    }
    return versions;
}

function createGemCommand(gem){
    var base = "gem install";
    var out = "";
    for(var i in  gem.versions){
        out += base+" "+gem.name+" -v="+gem.versions[i]+"\n";
    }
    return out;
}

child = exec("gem list", function (error, stdout, stderr) {
  if (error !== null) {
    console.log('exec error: ' + error);
  } else {
     getGemInfo(stdout);
  }
});

Have a fresh tip? Share with Coderwall community!

Post
Post a tip
Did you know?

JavaScript on a page runs with the privileges of that origin. One altered library, tag manager, or snippet can read inputs, change what people see, and call your APIs as the user.

Security insights from Cside