diff --git a/.gitignore b/.gitignore index 5a451dc..465ed0d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ node_modules/ -*.log \ No newline at end of file +*.log +*.iml +.idea \ No newline at end of file diff --git a/app/index.js b/app/index.js index 3f07cbb..b20dfdd 100644 --- a/app/index.js +++ b/app/index.js @@ -1,13 +1,14 @@ 'use strict'; -var yeoman = require('yeoman-generator'); -var chalk = require('chalk'); -var npmCheck = require('npm-check'); -var path = require('path'); -var yosay = require('yosay'); +var yeoman = require('yeoman-generator'), + chalk = require('chalk'), + npmCheck = require('npm-check'), + path = require('path'), + yosay = require('yosay'), + l = require('lodash'); module.exports = yeoman.generators.Base.extend({ - constructor: function() { + constructor: function () { yeoman.generators.Base.apply(this, arguments); // add option to skip install this.option('skip-install'); @@ -15,10 +16,13 @@ module.exports = yeoman.generators.Base.extend({ type: String, required: false }); - this.appname = this.appname || path.basename(process.cwd()); + var appName = this.appname || path.basename(process.cwd()); + this.appname = l.kebabCase(appName); + this.modulename = l.snakeCase(appName); + this.classname = l.capitalize(l.camelCase(appName)); }, - prompting: function() { + prompting: function () { // Yeoman greeting this.log(yosay( 'Yo! I\'m here to help build your ' + @@ -28,8 +32,8 @@ module.exports = yeoman.generators.Base.extend({ }, writing: { - app: function() { - this.basicTemplate = 'src/' + this._.slugify(this.appname); + app: function () { + this.basicTemplate = 'src/' + l.kebabCase(this.appname); this.copy('_package.json', 'package.json'); this.copy('_gulpfile.js', 'gulpfile.js'); @@ -37,7 +41,6 @@ module.exports = yeoman.generators.Base.extend({ this.copy('_editorconfig', '.editorconfig'); this.copy('_gitignore', '.gitignore'); - this.mkdir('src'); this.copy('src/_index.js', 'src/index.js'); this.copy('src/_index.html', 'src/index.html'); this.copy('src/_basic-template.html', this.basicTemplate + '.html'); @@ -45,25 +48,25 @@ module.exports = yeoman.generators.Base.extend({ } }, - install: function() { + install: function () { this.installDependencies({ skipInstall: this.options['skip-install'], bower: false, - callback: function() { + callback: function () { this.emit('dependenciesInstalled'); }.bind(this) }); - this.on('dependenciesInstalled', function() { + this.on('dependenciesInstalled', function () { npmCheck({ global: true - }).then(function(globalPackages) { + }).then(function (globalPackages) { if (!globalPackages.gulp) { return './node_modules/.bin/gulp'; } return 'gulp'; - }).then(function(gulpCommand) { - this.spawnCommand(gulpCommand).on('close', function() { + }).then(function (gulpCommand) { + this.spawnCommand(gulpCommand).on('close', function () { this.log(''); this.log(''); this.log('Setup complete, run ' + diff --git a/app/templates/_gulpfile.js b/app/templates/_gulpfile.js index ed40c78..20a9e6d 100644 --- a/app/templates/_gulpfile.js +++ b/app/templates/_gulpfile.js @@ -1,9 +1,9 @@ -var gulp = require('gulp'); -var concat = require('gulp-concat'); -var rename = require('gulp-rename'); -var shell = require('gulp-shell'); -var traceur = require('gulp-traceur'); -var webserver = require('gulp-webserver'); +var gulp = require('gulp'), + concat = require('gulp-concat'), + rename = require('gulp-rename'), + shell = require('gulp-shell'), + traceur = require('gulp-traceur'), + webserver = require('gulp-webserver'); // run init tasks gulp.task('default', ['dependencies', 'angular2', 'js', 'html', 'css']); @@ -12,7 +12,7 @@ gulp.task('default', ['dependencies', 'angular2', 'js', 'html', 'css']); gulp.task('dev', ['watch', 'serve']); // serve the build dir -gulp.task('serve', function() { +gulp.task('serve', function () { gulp.src('build') .pipe(webserver({ open: true @@ -20,37 +20,37 @@ gulp.task('serve', function() { }); // watch for changes and run the relevant task -gulp.task('watch', function() { +gulp.task('watch', function () { gulp.watch('src/**/*.js', ['js']); gulp.watch('src/**/*.html', ['html']); gulp.watch('src/**/*.css', ['css']); }); // move dependencies into build dir -gulp.task('dependencies', function() { +gulp.task('dependencies', function () { return gulp.src([ - 'node_modules/angular2/node_modules/rx/dist/rx.all.js', - 'node_modules/angular2/node_modules/traceur/bin/traceur.js', - 'node_modules/angular2/node_modules/traceur/bin/traceur-runtime.js', - 'node_modules/angular2/node_modules/zone.js/zone.js', - 'node_modules/es6-module-loader/dist/es6-module-loader.js', - 'node_modules/es6-module-loader/dist/es6-module-loader.js.map', - 'node_modules/systemjs/dist/system.js', - 'node_modules/systemjs/dist/system.js.map' - ]) + 'node_modules/angular2/node_modules/rx/dist/rx.all.js', + 'node_modules/angular2/node_modules/traceur/bin/traceur.js', + 'node_modules/angular2/node_modules/traceur/bin/traceur-runtime.js', + 'node_modules/angular2/node_modules/zone.js/zone.js', + 'node_modules/es6-module-loader/dist/es6-module-loader.js', + 'node_modules/es6-module-loader/dist/es6-module-loader.js.map', + 'node_modules/systemjs/dist/system.js', + 'node_modules/systemjs/dist/system.js.map' + ]) .pipe(gulp.dest('build/lib')); }); // tanspile, concat & move angular -gulp.task('angular2', function() { +gulp.task('angular2', function () { return gulp.src([ - traceur.RUNTIME_PATH, - 'node_modules/angular2/es6/prod/*.es6', - 'node_modules/angular2/es6/prod/src/**/*.es6' - ], { - base: 'node_modules/angular2/es6/prod' - }) - .pipe(rename(function(path) { + traceur.RUNTIME_PATH, + 'node_modules/angular2/es6/prod/*.es6', + 'node_modules/angular2/es6/prod/src/**/*.es6' + ], { + base: 'node_modules/angular2/es6/prod' + }) + .pipe(rename(function (path) { path.dirname = 'angular2/' + path.dirname; path.extname = ''; })) @@ -63,7 +63,7 @@ gulp.task('angular2', function() { }); // transpile & move js -gulp.task('js', function() { +gulp.task('js', function () { return gulp.src('src/**/*.js') .pipe(rename({ extname: '' @@ -81,13 +81,13 @@ gulp.task('js', function() { }); // move html -gulp.task('html', function() { +gulp.task('html', function () { return gulp.src('src/**/*.html') .pipe(gulp.dest('build')) }); // move css -gulp.task('css', function() { +gulp.task('css', function () { return gulp.src('src/**/*.css') .pipe(gulp.dest('build')) }); diff --git a/app/templates/_package.json b/app/templates/_package.json index f7c8ad3..8d73433 100644 --- a/app/templates/_package.json +++ b/app/templates/_package.json @@ -1,17 +1,17 @@ { - "name": "<%= _.slugify(appname) %>", + "name": "<%= appname %>", "version": "0.0.0", "dependencies": { - "angular2": "^2.0.0-alpha.18", - "es6-module-loader": "~0.11.0", - "systemjs": "~0.11.0" + "angular2": "2.0.0-alpha.21", + "es6-module-loader": "0.16.6", + "systemjs": "0.16.10" }, "devDependencies": { - "gulp": "^3.8.11", - "gulp-concat": "^2.5.2", - "gulp-rename": "^1.2.0", - "gulp-shell": "^0.4.0", - "gulp-traceur": "^0.17.0", - "gulp-webserver": "^0.9.0" + "gulp": "3.8.11", + "gulp-concat": "2.5.2", + "gulp-rename": "1.2.2", + "gulp-shell": "0.4.1", + "gulp-traceur": "0.17.1", + "gulp-webserver": "0.9.0" } } diff --git a/app/templates/_readme.md b/app/templates/_readme.md index 9e7b96f..fec508b 100644 --- a/app/templates/_readme.md +++ b/app/templates/_readme.md @@ -1 +1 @@ -# <%= _.capitalize(_.humanize(appname)) %> \ No newline at end of file +# <%= appname %> diff --git a/app/templates/src/_basic-template.html b/app/templates/src/_basic-template.html index 99fe78b..af1c7df 100644 --- a/app/templates/src/_basic-template.html +++ b/app/templates/src/_basic-template.html @@ -1 +1 @@ -

<%= _.capitalize(_.humanize(appname)) %>

\ No newline at end of file +

<%= appname %>

diff --git a/app/templates/src/_basic-template.js b/app/templates/src/_basic-template.js index bfc0dd8..58c7076 100644 --- a/app/templates/src/_basic-template.js +++ b/app/templates/src/_basic-template.js @@ -1,17 +1,17 @@ import {Component, View} from 'angular2/angular2'; @Component({ - selector: '<%= _.slugify(appname) %>' + selector: '<%= appname %>' }) @View({ - templateUrl: '<%= _.slugify(appname) %>.html' + templateUrl: '<%= appname %>.html' }) -export class <%= _.classify(appname) %> { +export class <%= classname %> { constructor() { - console.info('<%= _.classify(appname) %> Component Mounted Successfully'); + console.info('<%= classname %> Component Mounted Successfully'); } } diff --git a/app/templates/src/_index.html b/app/templates/src/_index.html index 23bd727..676b0dd 100644 --- a/app/templates/src/_index.html +++ b/app/templates/src/_index.html @@ -4,7 +4,7 @@ - <%= _.capitalize(_.humanize(appname)) %> + <%= appname %> @@ -17,6 +17,7 @@ System.config({ paths: { 'angular2/*': 'lib/angular2.js', + 'traceur-runtime': 'lib/traceur-runtime.js', 'rx/dist/rx.all': 'lib/rx.all.js', 'index': 'index.js' } diff --git a/app/templates/src/_index.js b/app/templates/src/_index.js index 6b2f4df..9007f57 100644 --- a/app/templates/src/_index.js +++ b/app/templates/src/_index.js @@ -1,14 +1,14 @@ import {Component, View, bootstrap} from 'angular2/angular2'; -import {<%= _.classify(appname) %>} from '<%= _.slugify(appname) %>'; +import {<%= classname %>} from '<%= appname %>'; @Component({ selector: 'main' }) @View({ - directives: [<%= _.classify(appname) %>], + directives: [<%= classname %>], template: ` - <<%= _.slugify(appname) %>>> + <<%= appname %>>> ` }) diff --git a/package.json b/package.json index 06fef5b..399fc3e 100644 --- a/package.json +++ b/package.json @@ -31,12 +31,13 @@ ], "preferGlobal": true, "dependencies": { - "chalk": "^1.0.0", - "npm-check": "^3.2.10", - "yeoman-generator": "^0.18.9", - "yosay": "^1.0.2" + "chalk": "1.0.0", + "lodash": "3.7.0", + "npm-check": "3.2.10", + "yeoman-generator": "0.19.2", + "yosay": "1.0.2" }, "devDependencies": { - "mocha": "*" + "mocha": "2.2.4" } } diff --git a/test/test-app.js b/test/test-app.js index 1a2158c..6dcd005 100644 --- a/test/test-app.js +++ b/test/test-app.js @@ -1,13 +1,13 @@ 'use strict'; -var path = require('path'); -var assert = require('yeoman-generator').assert; -var helpers = require('yeoman-generator').test; -var os = require('os'); +var path = require('path'), + assert = require('yeoman-generator').assert, + helpers = require('yeoman-generator').test, + os = require('os'); -describe('when angular2 generator generates', function() { +describe('when angular2 generator generates', function () { - before(function(done) { + before(function (done) { helpers.run(path.join(__dirname, '../app')) .inDir(path.join(os.tmpdir(), './foo')) // always skip install in tests @@ -17,7 +17,7 @@ describe('when angular2 generator generates', function() { .on('end', done); }); - it('should create the required static files', function() { + it('should create the required static files', function () { assert.file([ 'package.json', '.editorconfig', @@ -29,10 +29,10 @@ describe('when angular2 generator generates', function() { ]); }); - describe('when no arguments are passed through', function() { + describe('when no arguments are passed through', function () { - describe('when generation happens in a basic named directory', function() { - before(function(done) { + describe('when generation happens in a basic named directory', function () { + before(function (done) { helpers.run(path.join(__dirname, '../app')) .inDir(path.join(os.tmpdir(), './basic')) // always skip install in tests @@ -42,7 +42,7 @@ describe('when angular2 generator generates', function() { .on('end', done); }); - it('should create the dynamically named files named correctly', function() { + it('should create the dynamically named files named correctly', function () { assert.file([ 'src/basic.js', 'src/basic.html' @@ -50,8 +50,8 @@ describe('when angular2 generator generates', function() { }); }); - describe('when generation happens in a dashed named directory', function() { - before(function(done) { + describe('when generation happens in a dashed named directory', function () { + before(function (done) { helpers.run(path.join(__dirname, '../app')) .inDir(path.join(os.tmpdir(), './dash-named')) // always skip install in tests @@ -61,7 +61,7 @@ describe('when angular2 generator generates', function() { .on('end', done); }); - it('should create the dynamically named files named correctly', function() { + it('should create the dynamically named files named correctly', function () { assert.file([ 'src/dash-named.js', 'src/dash-named.html' @@ -69,8 +69,8 @@ describe('when angular2 generator generates', function() { }); }); - describe('when generation happens in a case named directory', function() { - before(function(done) { + describe('when generation happens in a case named directory', function () { + before(function (done) { helpers.run(path.join(__dirname, '../app')) .inDir(path.join(os.tmpdir(), './caseNamed')) // always skip install in tests @@ -81,20 +81,20 @@ describe('when angular2 generator generates', function() { .on('end', done); }); - it('should create the dynamically named files named correctly', function() { + it('should create the dynamically named files named correctly', function () { assert.file([ - 'src/casenamed.js', - 'src/casenamed.html' + 'src/case-named.js', + 'src/case-named.html' ]); }); }); }); - describe('when arguments are passed through', function() { + describe('when arguments are passed through', function () { - describe('when generation happens with a basic name passed as an argument', function() { - before(function(done) { + describe('when generation happens with a basic name passed as an argument', function () { + before(function (done) { helpers.run(path.join(__dirname, '../app')) .inDir(path.join(os.tmpdir(), './foo')) // always skip install in tests @@ -105,7 +105,7 @@ describe('when angular2 generator generates', function() { .on('end', done); }); - it('should create the dynamically named files named correctly', function() { + it('should create the dynamically named files named correctly', function () { assert.file([ 'src/basic.js', 'src/basic.html' @@ -113,8 +113,8 @@ describe('when angular2 generator generates', function() { }); }); - describe('when generation happens with a dashed name as an argument', function() { - before(function(done) { + describe('when generation happens with a dashed name as an argument', function () { + before(function (done) { helpers.run(path.join(__dirname, '../app')) .inDir(path.join(os.tmpdir(), './foo')) // always skip install in tests @@ -125,7 +125,7 @@ describe('when angular2 generator generates', function() { .on('end', done); }); - it('should create the dynamically named files named correctly', function() { + it('should create the dynamically named files named correctly', function () { assert.file([ 'src/dash-named.js', 'src/dash-named.html' @@ -133,8 +133,8 @@ describe('when angular2 generator generates', function() { }); }); - describe('when generation happens with a cased name as an argument', function() { - before(function(done) { + describe('when generation happens with a cased name as an argument', function () { + before(function (done) { helpers.run(path.join(__dirname, '../app')) .inDir(path.join(os.tmpdir(), './foo')) // always skip install in tests @@ -145,10 +145,10 @@ describe('when angular2 generator generates', function() { .on('end', done); }); - it('should create the dynamically named files named correctly', function() { + it('should create the dynamically named files named correctly', function () { assert.file([ - 'src/casedname.js', - 'src/casedname.html' + 'src/cased-name.js', + 'src/cased-name.html' ]); }); });