Skip to content

Instantly share code, notes, and snippets.

@sunny1304
Last active December 29, 2015 11:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sunny1304/7661748 to your computer and use it in GitHub Desktop.
Save sunny1304/7661748 to your computer and use it in GitHub Desktop.
Rails like model generator for Node js
// node fname.js g model user name
var fs =require('fs');
var os = require('os');
var args_list = process.argv;
var folder = args_list[3]
var model_name = args_list[4]
var model_attrs = args_list.slice(5);
var eol = os.EOL;
// console.log(folder, model_name, model_attrs);
var template = [];
model_attrs.forEach(function(attr){
sep_attr = attr.split(":");
if (sep_attr.length > 1){
var upcase_second_attr = sep_attr[1].split(",")[0];
var upcase_second_attr = upcase_second_attr[0].toUpperCase()+ upcase_second_attr.slice(1);
var sep_attr_comma = sep_attr[1].split(',');
if (sep_attr_comma.length>1){
if ((sep_attr_comma.indexOf('string') == -1) || (sep_attr_comma.indexOf('String') == -1)){
var upcase_second_attr = 'String';
}
var model_attr = sep_attr[0]+" : { type: "+ upcase_second_attr+", ";
model_attr += sep_attr_comma.join(": true,");
model_attr += ": true }";
template.push(model_attr);
}
else{
var model_attr = sep_attr[0]+" : "+ upcase_second_attr;
template.push(model_attr);
}
}
else{
var model_attr = sep_attr[0]+" : "+ "String";
template.push(model_attr);
}
});
if (template.length>0){
attr_template_string = template.join(",\n\t\t")+",";
}
else{
attr_template_string = "";
}
var mongoose_model_name = model_name[0].toUpperCase()+model_name.slice(1);
var schema_name = mongoose_model_name +"Schema";
var template = [
"var mongoose = require('mongoose');"
,"var Schema = mongoose.Schema;"
,"var"+ schema_name + "= new Schema({"
,"\t \t"+attr_template_string+""
,""
,""
,"\t\tcreated_at: {type: Date, default: Date.now()}"
,"\n\t )};"
,""
,""
,"mongoose.model("+"'"+ mongoose_model_name +"'"+","+schema_name +")"
].join(eol);
// console.log(attr_template_string);
if (!fs.existsSync(__dirname+'/models')){
fs.mkdirSync(__dirname+"/"+folder+"s");
}
fs.writeFileSync('./models/'+model_name+'.js', template);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment