slush-regenerator
Version:
A slush generator for many website things (Optimized for Laravel 5.2)
150 lines (137 loc) • 5.28 kB
JavaScript
var gulp = require('gulp'),
gutil = require('gulp-util'),
gulpPlugins = require('auto-plug')('gulp'),
_ = require('underscore.string'),
inquirer = require('inquirer');
function format(string)
{
if (string == null)
{
string = '';
}
var username = string.toLowerCase();
return username.replace(/\s/g, '');
}
var defaults = (function () {
var homeDir = process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE,
workingDirName = process.cwd().split('/').pop().split('\\').pop(),
osUserName = homeDir && homeDir.split('/').pop() || 'root',
configFile = homeDir + '/.gitconfig',
user = {};
if (require('fs').existsSync(configFile)) {
user = require('iniparser').parseSync(configFile).user;
}
return {
homeDir: homeDir,
vendorName: 'regeneration',
packageName: workingDirName,
userName: format(user.name) || osUserName,
authorEmail: user.email || ''
};
})();
gulp.task('default', function (done) {
var prompts = [{
name: 'vendorName',
message: 'What project is this for, e.g vendor?',
default: defaults.vendorName
}, {
name: 'packageName',
message: 'What is the name of your package?',
default: defaults.packageName
}, {
name: 'packageDescription',
message: 'What is the description?'
}, {
name: 'packageVersion',
message: 'What is the version of your project?',
default: '0.1.0'
}, {
name: 'authorName',
message: 'What is the author name?',
}, {
name: 'authorEmail',
message: 'What is the author email?',
default: defaults.authorEmail
}, {
name: 'userName',
message: 'What is the github username?',
default: defaults.userName
}, {
type: 'confirm',
name: 'moveon',
message: 'Continue?'
}];
//Ask
inquirer.prompt(prompts,
function (answers) {
if (!answers.moveon) {
return done();
}
// Transform user input into usable data
var data = {
vendorName: answers.vendorName,
packageName: answers.packageName,
packageDescription: answers.packageDescription,
packageVersion: answers.packageVersion,
authorName: answers.authorName,
authorEmail: answers.authorEmail,
userName: answers.userName,
packageNameSlug: _.slugify(answers.packageName),
packageNameCaps: _.capitalize(answers.packageName),
vendorNameCaps: _.capitalize(answers.vendorName)
};
gulp.src(__dirname + '/templates/package/**')
.pipe( gulpPlugins.template(data) )
.pipe( gulpPlugins.rename( function(file)
{
var dir = file.dirname;
var name = file.basename;
var ext = file.extname;
if (file.basename[0] === '_')
{
var replacements = [];
switch (file.basename)
{
// This is a weird file to deal with
case '_packageNameCapsServiceProvider':
replacements.push('vendorNameCaps', 'packageNameCaps');
break;
case '_packageNameCaps':
replacements.push('vendorNameCaps', 'packageNameCaps');
break;
default:
// Try to match file name against template variable exactly or try all the variables
if (data[file.basename.slice(1)] !== undefined || data[file.dirname.slice(1)] !== undefined)
{
replacements.push(file.basename.slice(1), file.dirname.slice(1));
}
else
{
replacements = Object.keys(data);
}
break;
}
if (replacements.length > 0)
{
replacements.forEach( function(item)
{
var find = '_' + item;
var replace = data[item];
dir = dir.replace(find, replace);
name = name.replace(find, replace);
});
}
}
file.dirname = dir;
file.basename = name;
file.ext = ext;
}))
.pipe(gulpPlugins.conflict('./'))
.pipe(gulp.dest('./'))
.pipe(gulpPlugins.install())
.on('end', function()
{
done();
});
});
});