UNPKG

trinte-creator

Version:
97 lines (85 loc) 4.11 kB
var ejs = require('ejs') , fs = require('fs') , path = require('path') , inflection = require('../lib/inflection'); /** * Script to create a default view, requires the model to exist */ exports.execute = function (params, appPath, options) { if (!options.model) { console.log("You must specifiy a model name to generate the views against!"); return; } /** * Create the model based on a singular (e.g. people becomes person, users becomes user) */ var modelName = params[0].singularize(); if (modelName != params[0]) { console.log("Using model name as singular not plural: " + modelName); } // Capitalise modelName = modelName.capitalize(); var modelFile = appPath + "/models/" + modelName + '.js' var controllerName = modelName.pluralize(); var viewFolder = appPath + "/views/" + controllerName.toLowerCase(); var viewIndexTemplate = __dirname + '/templates/create-view.template.index.ejs'; var viewEditTemplate = __dirname + '/templates/create-view.template.edit.ejs'; var viewShowTemplate = __dirname + '/templates/create-view.template.show.ejs'; var viewFormTemplate = __dirname + '/templates/create-view.template.form.ejs'; var viewNewTemplate = __dirname + '/templates/create-view.template.new.ejs'; // Check if the model exists var fileCheck = fs.existsSync(modelFile); if (!fileCheck) { console.log("The model you have specified doesn't exist!"); console.log("You need to create the model first."); console.log("e.g. script create-model " + modelName); return; } // Check if the view exists var fileCheck = fs.existsSync(viewFolder); if (fileCheck) { if (params[1] != "force") { console.log("The views folder already exists for this model!"); console.log("Add an additional paramater of 'force' to over write the views."); console.log("e.g. script create-view " + modelName + " force"); return; } } else { fs.mkdirSync(viewFolder, '755'); } // Read the template var tmpIndex = fs.readFileSync(viewIndexTemplate, 'utf8'); var tmpForm = fs.readFileSync(viewFormTemplate, 'utf8'); var tmpEdit = fs.readFileSync(viewEditTemplate, 'utf8'); var tmpShow = fs.readFileSync(viewShowTemplate, 'utf8'); var tmpNew = fs.readFileSync(viewNewTemplate, 'utf8'); var fields = []; params.forEach(function (param) { var wf = param.split(':'); if (wf[0] != 'force' && wf[0] != modelName) { fields.push({ param_name : wf[0].capitalize(), param_val : wf[0] }); } }); if (!fields.length) { fields.push({ param_name : "Name", param_val : "name" }); } // Render the views var retIndex = ejs.render(tmpIndex, { fields: fields, modelName: modelName, controllerName: controllerName, open: "<?", close: "?>" }, {delimiter: '?'}); var retEdit = ejs.render(tmpEdit, { fields: fields, modelName: modelName, controllerName: controllerName, open: "<?", close: "?>" }, {delimiter: '?'}); var retNew = ejs.render(tmpNew, { fields: fields, modelName: modelName, controllerName: controllerName, open: "<?", close: "?>" }, {delimiter: '?'}); var retShow = ejs.render(tmpShow, { fields: fields, modelName: modelName, controllerName: controllerName, open: "<?", close: "?>" }, {delimiter: '?'}); var retForm = ejs.render(tmpForm, { fields: fields, modelName: modelName, controllerName: controllerName, open: "<?", close: "?>" }, {delimiter: '?'}); // Write the file fs.writeFileSync(viewFolder + "/index.html", retIndex, 'utf8'); fs.writeFileSync(viewFolder + "/edit.html", retEdit, 'utf8'); fs.writeFileSync(viewFolder + "/show.html", retShow, 'utf8'); fs.writeFileSync(viewFolder + "/form.html", retForm, 'utf8'); fs.writeFileSync(viewFolder + "/new.html", retNew, 'utf8'); console.log('Views ' + modelName + ' created in views/' + modelName.toLowerCase()); };