slush-y
Version:
A slush generator for Best Practices with AngularJS Fullstack applications.
140 lines (92 loc) • 3.12 kB
JavaScript
(function(){
'use strict';
var $ = require('gulp-load-plugins')({lazy:false});
var _ = require('lodash');
var path = require('path');
var gulp = require('gulp');
var storage = require('gulp-storage')(gulp)
var questions = require('./prompts');
var inquirer = require('inquirer');
var _str = require('../../../src/Utility/strings/index.js');
var fs = require('fs')
/**
* Controller Bound to the Slushy Prototype;
* @return {Function} Callback function for the Controller Task to Call
*/
module.exports = function ( done ) {
var _this = this;
_this.storage.create('config-y','config-y.json');
// setDefaults();
// generate();
_this.prompts = [];
_this.prompts.push( questions() );
/////////////////////
var templates = _this.finder(__dirname + '/templates');
var dest = {};
dest.modules = path.join(process.cwd(), 'client/app/modules');
var flags = {};
var filters = {};
filters.providers = [];
filters.functions = [];
filters.module = null;
filters.appName = null;
filters.names = {};
var config = _this.storage.get();
var defaults = {};
defaults.functions = ['create', 'update', 'destroy'];
var args = _this.args;
/////////////////////
init( function (){
done();
});
/////////////////////
function init(cb){
_this.name = args[0];
_this.names = _str.str().multi(_this.name);
startPrompt( next );
function next(answers){
// console.log(filters);
filters.moduleNames = _str.str().simple( _this.name );
_.assign(filters, config);
_.assign(filters, answers);
filters.names = _this.names;
if(_.isEmpty(filters.functions)){
filters.functions = defaults.functions;
}
dest.final = path.join(dest.modules, _this.names.slug);
generate()
}
}
function startPrompt(callback){
inquirer
.prompt(_this.prompts, function (chosen){
var finalAnswers = {};
if(chosen.folders){finalAnswers.folders = chosen.folders}
callback(finalAnswers)
})
}
function generate(){
create_folders();
create_module();
}
function create_folders(){
gulp
.src( templates.options.dirs( filters.folders ) )
.pipe( gulp.dest( dest.final ) )
}
function create_module(){
gulp.src( templates.base.all() )
.pipe( $.template( filters ) )
.pipe( $.rename( rename(_this.names.plural.slug) ))
.pipe( $.conflict( dest.final ))
.pipe( gulp.dest( dest.final ))
}
function rename ( name ) {
return function (file){
if (file.basename.indexOf('_') == 0) {
file.basename = file.basename.replace('_', name);
}
};
}
};
})();