blob: 72c6f56fa4214dccb30aec3a57571442bc7c693c [file] [log] [blame]
Matteo Scandoloa0449cd2015-11-03 10:48:01 +01001'use strict';
2
3var generators = require('yeoman-generator');
Matteo Scandoloe53ee052015-11-03 14:32:00 +01004var user = require('../node_modules/yeoman-generator/lib/actions/user');
5
6var config = {};
Matteo Scandoloa3839e32016-04-28 16:20:53 -07007var userName;
Matteo Scandoloa0449cd2015-11-03 10:48:01 +01008
9module.exports = generators.Base.extend({
Matteo Scandolo6be0cd22015-11-03 16:27:07 +010010 _fistCharToUpper: function(string){
11 return string.replace(/^./, string[0].toUpperCase());
12 },
Matteo Scandolod05ac6c2015-12-01 16:02:29 -080013 prompting: {
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070014 name: function(){
Matteo Scandolod05ac6c2015-12-01 16:02:29 -080015 var done = this.async();
16 this.prompt({
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070017 type: 'input',
18 name: 'name',
19 message: 'Your project name',
20 default: this.config.get('name') // value set in .yo-rc.json
Matteo Scandolod05ac6c2015-12-01 16:02:29 -080021 }, function (answers) {
Matteo Scandolod05ac6c2015-12-01 16:02:29 -080022 // TODO check if this view already exist
23 config.name = answers.name;
24 done();
25 }.bind(this));
Matteo Scandolod05ac6c2015-12-01 16:02:29 -080026 }
Matteo Scandoloe53ee052015-11-03 14:32:00 +010027 },
28 writing: {
29 rcFiles: function(){
arpiagariu4bb9e5b2016-05-17 15:37:38 -070030 if (!user.git.name()){
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070031 userName = ['', '']
arpiagariu4bb9e5b2016-05-17 15:37:38 -070032 }
33 else {
34 userName = user.git.name().split(' ');
35 }
Matteo Scandoloe53ee052015-11-03 14:32:00 +010036 this.fs.copy(this.templatePath('.bowerrc'), this.destinationPath(`${this.config.get('folder')}/${config.name}/.bowerrc`));
37 this.fs.copy(this.templatePath('.gitignore'), this.destinationPath(`${this.config.get('folder')}/${config.name}/.gitignore`));
38 },
39 packageJson: function(){
40 this.fs.copyTpl(
41 this.templatePath('package.json'),
42 this.destinationPath(`${this.config.get('folder')}/${config.name}/package.json`),
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070043 { name: config.name, author: {name: user.git.name()} }
Matteo Scandoloe53ee052015-11-03 14:32:00 +010044 );
45 },
46 bowerJson: function(){
47 this.fs.copyTpl(
48 this.templatePath('bower.json'),
49 this.destinationPath(`${this.config.get('folder')}/${config.name}/bower.json`),
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070050 { name: config.name, author: {name: user.git.name(), email: user.git.email()} }
Matteo Scandoloe53ee052015-11-03 14:32:00 +010051 );
52 },
Matteo Scandoloba2af3d2015-11-06 10:35:20 +010053 index: function(){
Matteo Scandoloe53ee052015-11-03 14:32:00 +010054 this.fs.copyTpl(
55 this.templatePath('src/index.html'),
56 this.destinationPath(`${this.config.get('folder')}/${config.name}/src/index.html`),
Matteo Scandoloa3839e32016-04-28 16:20:53 -070057 { name: config.name, fileName: this._fistCharToUpper(config.name), user: {firstname: userName[0]}}
Matteo Scandoloe53ee052015-11-03 14:32:00 +010058 );
59 },
Matteo Scandoloba2af3d2015-11-06 10:35:20 +010060 css: function(){
Matteo Scandoloba5e19d2015-11-06 18:25:52 +010061 this.fs.copyTpl(
Matteo Scandoloba2af3d2015-11-06 10:35:20 +010062 this.templatePath('src/css/dev.css'),
Matteo Scandoloba5e19d2015-11-06 18:25:52 +010063 this.destinationPath(`${this.config.get('folder')}/${config.name}/src/css/dev.css`),
64 {fileName: this._fistCharToUpper(config.name)}
Matteo Scandolo6be0cd22015-11-03 16:27:07 +010065 );
66 },
Arpit Agarwalfecac782016-07-18 17:30:32 -070067 scss: function(){
Matteo Scandolob7c91cf2016-03-29 14:23:20 -070068 this.fs.copyTpl(
69 this.templatePath('src/sass/main.scss'),
70 this.destinationPath(`${this.config.get('folder')}/${config.name}/src/sass/main.scss`),
71 {fileName: this._fistCharToUpper(config.name)}
72 );
73 },
Matteo Scandoloe53ee052015-11-03 14:32:00 +010074 mainJs: function(){
75 this.fs.copyTpl(
76 this.templatePath('src/js/main.js'),
77 this.destinationPath(`${this.config.get('folder')}/${config.name}/src/js/main.js`),
Matteo Scandoloba5e19d2015-11-06 18:25:52 +010078 { name: config.name, fileName: this._fistCharToUpper(config.name) }
Matteo Scandoloe53ee052015-11-03 14:32:00 +010079 );
80 },
Arpit Agarwalfecac782016-07-18 17:30:32 -070081 image: function(){
82 this.fs.copyTpl(
83 this.templatePath('src/icons/README.md'),
84 this.destinationPath(`${this.config.get('folder')}/${config.name}/src/icons/README.md`));
85 },
Matteo Scandoloe53ee052015-11-03 14:32:00 +010086 template: function(){
87 this.fs.copy(this.templatePath('src/templates/users-list.tpl.html'), this.destinationPath(`${this.config.get('folder')}/${config.name}/src/templates/users-list.tpl.html`));
88 },
89 gulp: function(){
Matteo Scandolo6be0cd22015-11-03 16:27:07 +010090 this.fs.copyTpl(
91 this.templatePath('gulp/*.js'),
92 this.destinationPath(`${this.config.get('folder')}/${config.name}/gulp`),
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -070093 {name: config.name, fileName: this._fistCharToUpper(config.name)}
Matteo Scandolo6be0cd22015-11-03 16:27:07 +010094 );
Matteo Scandoloe53ee052015-11-03 14:32:00 +010095 this.fs.copy(this.templatePath('gulpfile.js'), this.destinationPath(`${this.config.get('folder')}/${config.name}/gulpfile.js`));
Matteo Scandolob165a3f2015-11-04 17:28:38 +010096 },
97 karma: function(){
98 this.fs.copy(
99 this.templatePath('karma.conf.js'),
100 this.destinationPath(`${this.config.get('folder')}/${config.name}/karma.conf.js`)
101 );
102 },
103 spec: function(){
Matteo Scandolob165a3f2015-11-04 17:28:38 +0100104 this.fs.copyTpl(
105 this.templatePath('spec/sample.test.js'),
106 this.destinationPath(`${this.config.get('folder')}/${config.name}/spec/sample.test.js`),
107 { name: config.name, user: {email: user.git.email(), firstname: userName[0], lastname: userName[1] } }
108 );
Matteo Scandoloe3bc18d2015-11-05 18:36:10 +0100109 },
110 lint: function(){
111 this.fs.copy(
112 this.templatePath('.eslintrc'),
113 this.destinationPath(`${this.config.get('folder')}/${config.name}/.eslintrc`)
114 );
Matteo Scandoloe53ee052015-11-03 14:32:00 +0100115 }
116 },
117 install: function(){
118 var done = this.async();
119 this.prompt({
Matteo Scandolo4ac9a0b2016-05-23 15:31:25 -0700120 type: 'confirm',
121 name: 'deps',
122 message: 'Install dependecies?',
123 default: false // value set in .yo-rc.json
Matteo Scandoloe53ee052015-11-03 14:32:00 +0100124 }, function (answers) {
125 if(answers.deps){
126 process.chdir(`${this.config.get('folder')}/${config.name}`);
127 this.installDependencies();
128 }
Matteo Scandoloa0449cd2015-11-03 10:48:01 +0100129 done();
130 }.bind(this));
131 }
132});