Skip to content

Commit

Permalink
expose main method for parsing of grunt config obj
Browse files Browse the repository at this point in the history
  • Loading branch information
creynders committed Mar 8, 2014
1 parent a85d961 commit e1fb7b5
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 12 deletions.
18 changes: 18 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
var writeFiles = require('./lib/writeFiles');
var path = require('path');
var fs = require('fs');
var tmpFile = '.tmp.gruntrc';

module.exports = function(data, type, target){
if('string' === typeof data){
fs.writeFileSync(tmpFile, 'module.exports='+data+';', {encoding:'utf8'});
data = require(path.resolve('./' + tmpFile));
fs.unlinkSync(tmpFile);
}

return writeFiles({
data : data,
type: type || 'json',
target : target || "config"
});
}
13 changes: 8 additions & 5 deletions tasks/lib/writeFiles.js → lib/writeFiles.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,27 +16,29 @@ opts:
}
*/
module.exports = function writeFiles(opts){
var handler;
var handler,
generated = [];

if(fs.existsSync(opts.target)){
require('rimraf').sync(opts.target);
}
fs.mkdirSync(opts.target);

switch(opts.type){
default :
case "json":
handler = function(key){
var filename = opts.target + '/' + key + '.json';
fs.writeFileSync(filename, jsonify(opts.data[key]), {encoding:'utf8'});
opts.log && opts.log('Generated: ' + filename);
generated.push(filename);
};
break;
case "yaml":
case "yml":
handler = function(key){
var filename = opts.target + '/' + key + '.' + opts.type;
fs.writeFileSync(filename, yaml.safeDump(opts.data[key]), {encoding:'utf8'});
opts.log && opts.log('Generated: ' + filename);
generated.push(filename);
}
break;
case "coffee":
Expand All @@ -46,17 +48,18 @@ module.exports = function writeFiles(opts){
coffee.build('module.exports = ' + jsonify(opts.data[key]), {indent : " "}),
{encoding:'utf8'}
);
opts.log && opts.log('Generated: ' + filename);
generated.push(filename);
}
break;
case "js":
case "module":
handler = function(key){
var filename = opts.target + '/' + key + '.js';
fs.writeFileSync(filename, 'module.exports = ' + jsonify(opts.data[key]) + ';', {encoding:'utf8'});
opts.log && opts.log('Generated: ' + filename);
generated.push(filename);
};
break;
}
Object.keys(opts.data).forEach(handler);
return generated;
}
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,6 @@
],
"bin": {
"generate_configs": "./bin/generate_configs"
}
},
"main": "index.js"
}
17 changes: 11 additions & 6 deletions tasks/generate_configs.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
'use strict';

var inquirer = require('inquirer');
var writeFiles = require('./lib/writeFiles');
var writeFiles = require('../lib/writeFiles');

module.exports = function(grunt){

Expand All @@ -18,7 +18,8 @@ module.exports = function(grunt){

grunt.registerTask('generate_configs', 'Splits your grunt configuration into separate files', function(){
var done = this.async();
var type;
var type,
generated;
if(grunt.option('json')){
type = 'json';
}
Expand All @@ -35,8 +36,7 @@ module.exports = function(grunt){
var opts = {
target : grunt.option('target') || 'config',
type : type,
data : grunt.config.data,
log : grunt.log.writeln
data : grunt.config.data
};

if(grunt.file.exists(opts.target)){
Expand All @@ -50,15 +50,20 @@ module.exports = function(grunt){
}
], function(answers){
if(answers.overwrite){
writeFiles(opts);
generated = writeFiles(opts);
done(true);
}else{
done(false);
}
});
}else{
writeFiles(opts);
generated = writeFiles(opts);
done(true);
}
if( generated && generated.length > 0){
generated.forEach(function(filename){
grunt.log.writeln('Generated: ' + filename);
});
}
});
};

0 comments on commit e1fb7b5

Please sign in to comment.