UNPKG

generator-sublime

Version:

Yeoman generator for scaffolfding the standard configuration root files like .gitignore, .jshintrc, .jscsrc etc...

280 lines (241 loc) 9.3 kB
'use strict'; var path = require('path'); var _ = require('lodash'); var chalk = require('chalk'); var GitHubApi = require('github'); var Class = require('../class'); var githubOptions = { version: '3.0.0' }; var travisOptions = { version: '1.7.4' }; var github = new GitHubApi(githubOptions); var githubUserInfo = function(name, cb) { github.user.getFrom({ user: name }, function(err, res) { if (err) { throw new Error('Cannot fetch your github profile. Make sure you\'ve typed it correctly.'); } cb(JSON.parse(JSON.stringify(res))); }); }; var SublimeGenerator = Class.extend({ constructor: function() { Class.apply(this, arguments); this.option('skip-welcome-message', { desc: 'Hide the welcome message', type: 'Boolean', defaults: false }); this.option('nodeVersion', { desc: 'Node.js version', type: 'String', defaults: '0.12.4' }); this.option('githubUser', { desc: 'Your github username', type: 'String' }); this.option('checkTravis', { desc: 'Check if travis cli is installed', type: 'Boolean', defaults: true }); this.appnameFolder = _.snakeCase(this.appname); this.travisOptions = travisOptions; }, initializing: function() { this.pkg = require('../package.json'); this.notifyUpdate(this.pkg); var pkgDest = {}; try { pkgDest = this.readJsonFile(this.destinationPath('package.json')); } catch (e) {} this.pkgDest = pkgDest; this.allFiles = [ //'.jshintrc', //'.jscsrc', '.eslintrc.json', //'.tern-project', '.jsbeautifyrc', '.gitignore', '.travis.yml', //'shippable.yml', 'readme.md' //'.settings' ]; }, prompting: { welcome: function() { // Have Yeoman greet the user. if (!this.options['skip-welcome-message']) { this.log(this.utils.yosay('Welcome to the marvelous Sublime generator!')); } }, askFor: function() { var done = this.async(); var choices = this.allFiles.map(function(file) { return { name: file === '.settings' ? '.settings (codio)' : file, value: _.capitalize(_.camelCase(file)), checked: true }; }.bind(this)); var prompts = [{ type: 'checkbox', name: 'Files', message: 'What files do you need ?', choices: choices }, { type: 'input', name: 'Indent', message: 'What indentation value would you like ?', when: function(answers) { var values = answers.Files; return _.contains(values, 'Jshintrc') || _.contains(values, 'Jsbeautifyrc') || _.contains(values, 'Jscsrc') || _.contains(values, 'Settings'); }, validate: function(input) { var value = parseInt(input, 10); var isValid = value !== undefined && value >= 0 && value <= 10; if (!isValid) { return 'You must choose an integer value between 0 and 10'; } return true; }, default: 4 }, { type: 'confirm', name: 'NpmPublish', message: 'Would you like travis to publish your package on npm ?', default: false, when: function(answers) { var values = answers.Files; return _.contains(values, 'TravisYml'); } }, // { // type: 'confirm', // name: 'CodioStartup', // message: 'Do you need a codio startup.sh file ?', // default: false // }, { type: 'confirm', name: 'Gitconfig', message: 'Do you need a git-config.sh file ?', default: false } ]; this.prompt(prompts, function(answers) { answers.Files = [].concat(answers.Files); var hasListOption = function(list, option) { return answers[list].indexOf(option) !== -1; }; choices.forEach(function(choice) { this[choice.value] = hasListOption('Files', choice.value); }.bind(this)); this.Indent = answers.Indent; this.CodioStartup = answers.CodioStartup; this.Gitconfig = answers.Gitconfig; this.NpmPublish = answers.NpmPublish; done(); // check if travis is installed //if(this.options.checkTravis && this.NpmPublish) { // this.checkTravis().then(function() { // done(); // }); //} else { // done(); //} }.bind(this)); }, askForGithub: function() { var done = this.async(); var that = this; var prompts = [{ name: 'githubUser', message: 'What is your username on GitHub ?', validate: function(input) { var value = input; var isValid = value !== undefined && value.length > 0; if (!isValid) { return 'You must provide a valid login'; } return true; }, when: function() { return !that.options.githubUser && that.NpmPublish; } }]; this.prompt(prompts, function(answers) { this.githubUser = this.options.githubUser || answers.githubUser; if (this.githubUser === undefined) { done(); return; } githubUserInfo(this.githubUser, function(res) { this.realname = res.name; this.email = res.email; this.githubUrl = res.html_url; done(); }.bind(this)); }.bind(this)); } }, writing: { projectFiles: function() { this.sourceRoot(path.join(__dirname, '../templates/app')); // if (this.Jshintrc) { // this.template('_jshintrc', '.jshintrc'); // } // if (this.Jscsrc) { // this.template('_jscsrc', '.jscsrc'); // } if (this.EslintrcJson) { this.template('_eslintrc.json', '.eslintrc.json'); this.template('_eslintignore', '.eslintignore'); } // if (this.TernProject) { // this.template('_tern-project', '.tern-project'); // } if (this.Jsbeautifyrc) { this.template('_jsbeautifyrc', '.jsbeautifyrc'); } if (this.Gitignore) { this.template('_gitignore', '.gitignore'); } // if (this.CodioStartup) { // this.template('startup.sh', 'startup.sh'); // } // if (this.ShippableYml) { // this.template('shippable.yml', 'shippable.yml'); // } if (this.TravisYml) { var nodeVersion = this.options.nodeVersion; this.shortNodeVersion = _.take(nodeVersion.split('.'), 2).join('.'); this.template('_travis.yml', '.travis.yml'); this.template('_codeclimate.yml', '.codeclimate.yml'); } if (this.Gitconfig) { this.template('bin/git-config.sh', 'bin/git-config.sh'); this.template('bin/validate-commit-msg.js', 'bin/validate-commit-msg.js'); } if (this.ReadmeMd) { this.template('_README.md', 'readme.md'); } // if (this.Settings) { // this.template('_settings', '.settings'); // this.template('_codio', '.codio'); // } } }, end: function() { this.log(''); this.log(chalk.green('Woot generator-sublime:app!') + ' It appears that everything installed correctly.'); //this.log('Run the command ' + chalk.yellow('yo sublime:bash path/to/bashfile.sh') + ' to create a new bash file.'); //this.log('Run the command ' + chalk.yellow('yo sublime:gulps') + ' to scaffold gulp tasks.'); } }); module.exports = SublimeGenerator;