Skip to content

Commit

Permalink
async utils
Browse files Browse the repository at this point in the history
  • Loading branch information
speier committed May 24, 2012
1 parent 42e9c9e commit cf2cdc7
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 37 deletions.
63 changes: 27 additions & 36 deletions lib/cli/commands/create.js
@@ -1,45 +1,36 @@
var fs = require('fs');
var path = require('path');
var mkdirp = require('mkdirp');
var ncp = require('ncp').ncp;
var async = require('async');
var utils = require('../utils');
var logger = require('../clilogger');
var skeletons = require('../skeletons');

module.exports = function(name, skeleton) {
if (!skeleton) {
skeleton = skeletons.express;
}
if (!path.existsSync(skeleton)) {
skeleton = skeletons[skeleton];
}
if (!skeleton) {
return logger.error('invalid skeleton');
}
mkdirp(name, function(err) {
if (err) {
return logger.error(err);
} else {
ncp(skeleton, name, function(err) {
if (err) {
return logger.error(err);
}
updateProjectInfo(name);
});
}
skeleton = skeleton || skeletons.express;
path.exists(skeleton, function(exists) {
if (!exists) skeleton = skeletons[skeleton];
if (!skeleton) return logger.error('skeleton not found');
utils.copy(skeleton, name, function(err) {
if (err) return logger.error(err);
updateProjectInfo(name);
});
});
};

function updateProjectInfo(name) {
// update package.json ..
var pkg = JSON.parse(fs.readFileSync(path.join(name, 'package.json')));
pkg.name = path.basename(name);
fs.writeFileSync(path.join(name, 'package.json'), JSON.stringify(pkg, null, 2));
// update readme.md ..
var readme = fs.readFileSync(path.join(name, 'README.md'), 'utf-8');
readme = readme.replace(/application-name/gi, pkg.name);
fs.writeFileSync(path.join(name, 'readme.md'), readme);
// log info ..
logger.info('new project created');
logger.info('dont forget to install dependencies:');
logger.info('$ cd ' + name + ' && npm install');
};
var basename = path.basename(name);
async.parallel({
package: function(cb) {
utils.updateJson(path.join(name, 'package.json'), 'name', basename, cb);
},
readme: function(cb) {
utils.updateFile(path.join(name, 'README.md'), /application-name/gi, basename, cb);
}
}, function(err) {
if (err) logger.error(err);
logger.info('new project created');
logger.log('dont forget to install dependencies:');
logger.log('$ cd %s && npm install', name);
logger.log('then build your project:');
logger.log('$ torpedo build');
});
};
39 changes: 39 additions & 0 deletions lib/cli/utils.js
@@ -0,0 +1,39 @@
var fs = require('fs');
var path = require('path');
var mkdirp = require('mkdirp');
var ncp = require('ncp').ncp;
var async = require('async');

exports.copy = function(source, destination, callback) {
async.auto({
make_folder: function(cb) {
// create destionation folder if not exists
mkdirp(destination, cb);
},
copy_files: ['make_folder', function(cb) {
// copy all files and dirs recursively if folder exists
ncp(source, destination, cb);
}]
}, callback); // all tasks have been completed
};

exports.updateFile = function(filename, searchvalue, newvalue, callback) {
fs.readFile(filename, 'utf8', function(err, data) {
if (err) return callback(err);
data = data.replace(searchvalue, newvalue);
fs.writeFile(filename, data, function(err) {
return err ? callback(err) : callback(null);
});
});
};

exports.updateJson = function(filename, property, value, callback) {
fs.readFile(filename, 'utf8', function(err, data) {
if (err) return callback(err);
var json = JSON.parse(data);
json[property] = value;
fs.writeFile(filename, JSON.stringify(json, null, 2), function(err) {
return err ? callback(err) : callback(null);
});
});
};
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -44,4 +44,4 @@
"type": "MIT",
"url": "http://github.com/speier/torpedo/raw/master/LICENSE"
}]
}
}

0 comments on commit cf2cdc7

Please sign in to comment.