From 43ec13a701f7cc05198724ce6b7a417bc29e3168 Mon Sep 17 00:00:00 2001 From: gaboesquivel Date: Sun, 7 Dec 2014 19:09:56 -0600 Subject: [PATCH 1/4] remove yo from dependencies --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 1a4c84c..d2d403c 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ "globby": "^1.0.0", "gulp": "^3.8.10", "yeoman-generator": "^0.18.3", - "yo": "^1.3.3", "yosay": "^1.0.0" }, "devDependencies": { From 5ff98d84c61a8f5bfa864d8577531b61b248848e Mon Sep 17 00:00:00 2001 From: gaboesquivel Date: Mon, 8 Dec 2014 00:22:03 -0600 Subject: [PATCH 2/4] chore: fix tests --- Gruntfile.js | 392 ++++++++++++++++++ {generators/app => app}/index.js | 67 ++- {generators/app => app}/templates/_bower.json | 0 .../app => app}/templates/_gulpfile.js | 0 .../app => app}/templates/_package.json | 0 .../app => app}/templates/editorconfig | 0 {generators/app => app}/templates/gitignore | 0 app/templates/gulp/config.js | 205 +++++++++ .../gulp/tasks/scripts/js/browserify-app.js | 0 .../templates/gulp/tasks/scripts/js/lint.js | 0 .../templates/gulp/tasks/shared/assets.js | 0 .../gulp/tasks/shared/browserify-vendors.js | 0 .../templates/gulp/tasks/shared/clean.js | 0 .../templates/gulp/tasks/shared/config.js | 0 .../templates/gulp/tasks/shared/default.js | 0 .../templates/gulp/tasks/shared/serve.js | 0 .../templates/gulp/tasks/shared/watch.js | 0 .../templates/gulp/tasks/styles/css/styles.js | 0 .../gulp/tasks/styles/less/styles.js | 0 .../gulp/tasks/styles/sass/styles.js | 0 .../gulp/tasks/templates/html/index.js | 0 .../gulp/tasks/templates/html/templates.js | 0 .../gulp/tasks/templates/jade/index.js | 0 .../gulp/tasks/templates/jade/templates.js | 0 .../app => app}/templates/gulp/utilities.js | 0 {generators/app => app}/templates/jshintrc | 0 .../templates/src/assets/images/angulpify.png | Bin .../templates/src/scripts/app/app.config.js | 0 .../templates/src/scripts/app/app.module.js | 0 .../src/scripts/app/core/core.module.js | 0 .../src/scripts/app/layout/layout.config.js | 0 .../src/scripts/app/layout/layout.html | 0 .../src/scripts/app/layout/layout.jade | 0 .../src/scripts/app/layout/layout.module.js | 0 .../templates/src/scripts/app/vendors.js | 0 .../src/scripts/app/welcome/welcome.config.js | 0 .../scripts/app/welcome/welcome.controller.js | 0 .../src/scripts/app/welcome/welcome.html | 0 .../src/scripts/app/welcome/welcome.jade | 0 .../src/scripts/app/welcome/welcome.module.js | 0 .../templates/src/scripts/dev.config.json | 0 .../templates/src/scripts/index.html | 0 .../templates/src/scripts/index.jade | 0 .../templates/src/scripts/prod.config.json | 0 .../templates/src/styles/_layout.scss | 0 .../templates/src/styles/_variables.scss | 0 .../templates/src/styles/layout.css | 0 .../templates/src/styles/layout.less | 0 .../app => app}/templates/src/styles/main.css | 0 .../templates/src/styles/main.less | 0 .../templates/src/styles/main.scss | 0 .../templates/src/styles/variables.less | 0 generators/app/templates/gulp/config.js | 138 ------ package.json | 16 +- test/jade.js | 107 +++-- test/sass.js | 133 ++++-- test/test.js | 139 +++---- 57 files changed, 891 insertions(+), 306 deletions(-) create mode 100644 Gruntfile.js rename {generators/app => app}/index.js (73%) rename {generators/app => app}/templates/_bower.json (100%) rename {generators/app => app}/templates/_gulpfile.js (100%) rename {generators/app => app}/templates/_package.json (100%) rename {generators/app => app}/templates/editorconfig (100%) rename {generators/app => app}/templates/gitignore (100%) create mode 100644 app/templates/gulp/config.js rename {generators/app => app}/templates/gulp/tasks/scripts/js/browserify-app.js (100%) rename {generators/app => app}/templates/gulp/tasks/scripts/js/lint.js (100%) rename {generators/app => app}/templates/gulp/tasks/shared/assets.js (100%) rename {generators/app => app}/templates/gulp/tasks/shared/browserify-vendors.js (100%) rename {generators/app => app}/templates/gulp/tasks/shared/clean.js (100%) rename {generators/app => app}/templates/gulp/tasks/shared/config.js (100%) rename {generators/app => app}/templates/gulp/tasks/shared/default.js (100%) rename {generators/app => app}/templates/gulp/tasks/shared/serve.js (100%) rename {generators/app => app}/templates/gulp/tasks/shared/watch.js (100%) rename {generators/app => app}/templates/gulp/tasks/styles/css/styles.js (100%) rename {generators/app => app}/templates/gulp/tasks/styles/less/styles.js (100%) rename {generators/app => app}/templates/gulp/tasks/styles/sass/styles.js (100%) rename {generators/app => app}/templates/gulp/tasks/templates/html/index.js (100%) rename {generators/app => app}/templates/gulp/tasks/templates/html/templates.js (100%) rename {generators/app => app}/templates/gulp/tasks/templates/jade/index.js (100%) rename {generators/app => app}/templates/gulp/tasks/templates/jade/templates.js (100%) rename {generators/app => app}/templates/gulp/utilities.js (100%) rename {generators/app => app}/templates/jshintrc (100%) rename {generators/app => app}/templates/src/assets/images/angulpify.png (100%) rename {generators/app => app}/templates/src/scripts/app/app.config.js (100%) rename {generators/app => app}/templates/src/scripts/app/app.module.js (100%) rename {generators/app => app}/templates/src/scripts/app/core/core.module.js (100%) rename {generators/app => app}/templates/src/scripts/app/layout/layout.config.js (100%) rename {generators/app => app}/templates/src/scripts/app/layout/layout.html (100%) rename {generators/app => app}/templates/src/scripts/app/layout/layout.jade (100%) rename {generators/app => app}/templates/src/scripts/app/layout/layout.module.js (100%) rename {generators/app => app}/templates/src/scripts/app/vendors.js (100%) rename {generators/app => app}/templates/src/scripts/app/welcome/welcome.config.js (100%) rename {generators/app => app}/templates/src/scripts/app/welcome/welcome.controller.js (100%) rename {generators/app => app}/templates/src/scripts/app/welcome/welcome.html (100%) rename {generators/app => app}/templates/src/scripts/app/welcome/welcome.jade (100%) rename {generators/app => app}/templates/src/scripts/app/welcome/welcome.module.js (100%) rename {generators/app => app}/templates/src/scripts/dev.config.json (100%) rename {generators/app => app}/templates/src/scripts/index.html (100%) rename {generators/app => app}/templates/src/scripts/index.jade (100%) rename {generators/app => app}/templates/src/scripts/prod.config.json (100%) rename {generators/app => app}/templates/src/styles/_layout.scss (100%) rename {generators/app => app}/templates/src/styles/_variables.scss (100%) rename {generators/app => app}/templates/src/styles/layout.css (100%) rename {generators/app => app}/templates/src/styles/layout.less (100%) rename {generators/app => app}/templates/src/styles/main.css (100%) rename {generators/app => app}/templates/src/styles/main.less (100%) rename {generators/app => app}/templates/src/styles/main.scss (100%) rename {generators/app => app}/templates/src/styles/variables.less (100%) delete mode 100644 generators/app/templates/gulp/config.js diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..57cde6f --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,392 @@ +/*jshint node:true*/ + +// Generated on 2014-12-08 using +// generator-webapp 0.5.1 +'use strict'; + +// # Globbing +// for performance reasons we're only matching one level down: +// 'test/spec/{,*/}*.js' +// If you want to recursively match all subfolders, use: +// 'test/spec/**/*.js' + +module.exports = function (grunt) { + + // Time how long tasks take. Can help when optimizing build times + require('time-grunt')(grunt); + + // Load grunt tasks automatically + require('load-grunt-tasks')(grunt); + + // Configurable paths + var config = { + app: 'app', + dist: 'dist' + }; + + // Define the configuration for all the tasks + grunt.initConfig({ + + // Project settings + config: config, + + // Watches files for changes and runs tasks based on the changed files + watch: { + bower: { + files: ['bower.json'], + tasks: ['wiredep'] + }, + js: { + files: ['<%= config.app %>/scripts/{,*/}*.js'], + tasks: ['jshint'], + options: { + livereload: true + } + }, + jstest: { + files: ['test/spec/{,*/}*.js'], + tasks: ['test:watch'] + }, + gruntfile: { + files: ['Gruntfile.js'] + }, + styles: { + files: ['<%= config.app %>/styles/{,*/}*.css'], + tasks: ['newer:copy:styles', 'autoprefixer'] + }, + livereload: { + options: { + livereload: '<%= connect.options.livereload %>' + }, + files: [ + '<%= config.app %>/{,*/}*.html', + '.tmp/styles/{,*/}*.css', + '<%= config.app %>/images/{,*/}*' + ] + } + }, + + // The actual grunt server settings + connect: { + options: { + port: 9000, + open: true, + livereload: 35729, + // Change this to '0.0.0.0' to access the server from outside + hostname: 'localhost' + }, + livereload: { + options: { + middleware: function(connect) { + return [ + connect.static('.tmp'), + connect().use('/bower_components', connect.static('./bower_components')), + connect.static(config.app) + ]; + } + } + }, + test: { + options: { + open: false, + port: 9001, + middleware: function(connect) { + return [ + connect.static('.tmp'), + connect.static('test'), + connect().use('/bower_components', connect.static('./bower_components')), + connect.static(config.app) + ]; + } + } + }, + dist: { + options: { + base: '<%= config.dist %>', + livereload: false + } + } + }, + + // Empties folders to start fresh + clean: { + dist: { + files: [{ + dot: true, + src: [ + '.tmp', + '<%= config.dist %>/*', + '!<%= config.dist %>/.git*' + ] + }] + }, + server: '.tmp' + }, + + // Make sure code styles are up to par and there are no obvious mistakes + jshint: { + options: { + jshintrc: '.jshintrc', + reporter: require('jshint-stylish') + }, + all: [ + 'Gruntfile.js', + '<%= config.app %>/scripts/{,*/}*.js', + '!<%= config.app %>/scripts/vendor/*', + 'test/spec/{,*/}*.js' + ] + }, + + // Mocha testing framework configuration options + mocha: { + all: { + options: { + run: true, + urls: ['http://<%= connect.test.options.hostname %>:<%= connect.test.options.port %>/index.html'] + } + } + }, + + // Add vendor prefixed styles + autoprefixer: { + options: { + browsers: ['> 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1'] + }, + dist: { + files: [{ + expand: true, + cwd: '.tmp/styles/', + src: '{,*/}*.css', + dest: '.tmp/styles/' + }] + } + }, + + // Automatically inject Bower components into the HTML file + wiredep: { + app: { + ignorePath: /^\/|\.\.\//, + src: ['<%= config.app %>/index.html'], + exclude: ['bower_components/bootstrap/dist/js/bootstrap.js'] + } + }, + + // Renames files for browser caching purposes + rev: { + dist: { + files: { + src: [ + '<%= config.dist %>/scripts/{,*/}*.js', + '<%= config.dist %>/styles/{,*/}*.css', + '<%= config.dist %>/images/{,*/}*.*', + '<%= config.dist %>/styles/fonts/{,*/}*.*', + '<%= config.dist %>/*.{ico,png}' + ] + } + } + }, + + // Reads HTML for usemin blocks to enable smart builds that automatically + // concat, minify and revision files. Creates configurations in memory so + // additional tasks can operate on them + useminPrepare: { + options: { + dest: '<%= config.dist %>' + }, + html: '<%= config.app %>/index.html' + }, + + // Performs rewrites based on rev and the useminPrepare configuration + usemin: { + options: { + assetsDirs: [ + '<%= config.dist %>', + '<%= config.dist %>/images', + '<%= config.dist %>/styles' + ] + }, + html: ['<%= config.dist %>/{,*/}*.html'], + css: ['<%= config.dist %>/styles/{,*/}*.css'] + }, + + // The following *-min tasks produce minified files in the dist folder + imagemin: { + dist: { + files: [{ + expand: true, + cwd: '<%= config.app %>/images', + src: '{,*/}*.{gif,jpeg,jpg,png}', + dest: '<%= config.dist %>/images' + }] + } + }, + + svgmin: { + dist: { + files: [{ + expand: true, + cwd: '<%= config.app %>/images', + src: '{,*/}*.svg', + dest: '<%= config.dist %>/images' + }] + } + }, + + htmlmin: { + dist: { + options: { + collapseBooleanAttributes: true, + collapseWhitespace: true, + conservativeCollapse: true, + removeAttributeQuotes: true, + removeCommentsFromCDATA: true, + removeEmptyAttributes: true, + removeOptionalTags: true, + removeRedundantAttributes: true, + useShortDoctype: true + }, + files: [{ + expand: true, + cwd: '<%= config.dist %>', + src: '{,*/}*.html', + dest: '<%= config.dist %>' + }] + } + }, + + // By default, your `index.html`'s will take care + // of minification. These next options are pre-configured if you do not + // wish to use the Usemin blocks. + // cssmin: { + // dist: { + // files: { + // '<%= config.dist %>/styles/main.css': [ + // '.tmp/styles/{,*/}*.css', + // '<%= config.app %>/styles/{,*/}*.css' + // ] + // } + // } + // }, + // uglify: { + // dist: { + // files: { + // '<%= config.dist %>/scripts/scripts.js': [ + // '<%= config.dist %>/scripts/scripts.js' + // ] + // } + // } + // }, + // concat: { + // dist: {} + // }, + + // Copies remaining files to places other tasks can use + copy: { + dist: { + files: [{ + expand: true, + dot: true, + cwd: '<%= config.app %>', + dest: '<%= config.dist %>', + src: [ + '*.{ico,png,txt}', + 'images/{,*/}*.webp', + '{,*/}*.html', + 'styles/fonts/{,*/}*.*' + ] + }, { + src: 'node_modules/apache-server-configs/dist/.htaccess', + dest: '<%= config.dist %>/.htaccess' + }, { + expand: true, + dot: true, + cwd: 'bower_components/bootstrap/dist', + src: 'fonts/*', + dest: '<%= config.dist %>' + }] + }, + styles: { + expand: true, + dot: true, + cwd: '<%= config.app %>/styles', + dest: '.tmp/styles/', + src: '{,*/}*.css' + } + }, + + // Run some tasks in parallel to speed up build process + concurrent: { + server: [ + 'copy:styles' + ], + test: [ + 'copy:styles' + ], + dist: [ + 'copy:styles', + 'imagemin', + 'svgmin' + ] + } + }); + + + grunt.registerTask('serve', 'start the server and preview your app, --allow-remote for remote access', function (target) { + if (grunt.option('allow-remote')) { + grunt.config.set('connect.options.hostname', '0.0.0.0'); + } + if (target === 'dist') { + return grunt.task.run(['build', 'connect:dist:keepalive']); + } + + grunt.task.run([ + 'clean:server', + 'wiredep', + 'concurrent:server', + 'autoprefixer', + 'connect:livereload', + 'watch' + ]); + }); + + grunt.registerTask('server', function (target) { + grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.'); + grunt.task.run([target ? ('serve:' + target) : 'serve']); + }); + + grunt.registerTask('test', function (target) { + if (target !== 'watch') { + grunt.task.run([ + 'clean:server', + 'concurrent:test', + 'autoprefixer' + ]); + } + + grunt.task.run([ + 'connect:test', + 'mocha' + ]); + }); + + grunt.registerTask('build', [ + 'clean:dist', + 'wiredep', + 'useminPrepare', + 'concurrent:dist', + 'autoprefixer', + 'concat', + 'cssmin', + 'uglify', + 'copy:dist', + 'rev', + 'usemin', + 'htmlmin' + ]); + + grunt.registerTask('default', [ + 'newer:jshint', + 'test', + 'build' + ]); +}; diff --git a/generators/app/index.js b/app/index.js similarity index 73% rename from generators/app/index.js rename to app/index.js index 9294c2d..71386ff 100644 --- a/generators/app/index.js +++ b/app/index.js @@ -18,56 +18,85 @@ function copyFromGlob(generator, paths) { }); } -var AngulpifyGenerator = module.exports = yeoman.generators.Base.extend({ +module.exports = yeoman.generators.Base.extend({ + initializing: function () { + this.pkg = require('../package.json'); + }, + constructor: function () { yeoman.generators.Base.apply(this, arguments); + this.option('skip-install', {desc: 'Skip the bower and node installations'}); + + this.option('test-framework', { + desc: 'Test framework to be invoked', + type: String, + defaults: 'mocha' + }); }, - initializing: function () {}, + prompting: function () { var done = this.async(); var welcomeMessage = 'Out of the box I include '+ chalk.red('AngularJS')+', '+chalk.red('Gulp')+' and '+chalk.red('Browserify')+' to build your app.'; this.log(yosay(welcomeMessage)); + var prompts = [ { - type: 'input', name: 'project', message: 'What\'s your project name?', + type: 'input', + name: 'project', + message: 'What\'s your project name?', default: this.appname }, - { - type: 'list', name: 'scripts', message: 'Would you like to use a language other than JavaScript?', - choices: [ - {name: 'Nop, JavaScript please.', value: {name: 'js', extensions: '.js'}} - ], - default: 0 - }, { type: 'list', name: 'styles', message: 'Would you like to use a preprocessor?', choices: [ - {name: 'Less', value: {name: 'less', extensions: '.less'}}, - {name: 'Sass', value: {name: 'sass', extensions: '.scss'}}, - {name: 'Nop, CSS please.', value: {name: 'css', extensions: '.css'}}, + {name: 'Less', value: 'less'}, + {name: 'Sass', value: 'sass'}, + {name: 'Nop, CSS please.', value: 'css'} ], default: 2 }, { - type: 'list', name: 'templates', message: 'Would you like to use a template engine?', + type: 'list', + name: 'templates', + message: 'Would you like to use a template engine?', choices: [ - {name: 'Jade', value: {name: 'jade', extensions: '.jade'}}, - {name: 'Nop. HTML please.', value: {name: 'html', extensions: '.html'}} + {name: 'Jade', value: 'jade'}, + {name: 'Nop. HTML please.', value: 'html'} ], default: 1 } ]; this.prompt(prompts, function (answers) { + this.project = answers.project.trim().replace(/\s+/g, '-').toLowerCase(); - this.scripts = answers.scripts; - this.styles = answers.styles; - this.templates = answers.templates; + + //TODO: Refactor the way extension names are handled + // Umba-wamba to keep things working after prompts changes. + + this.scripts = {name: 'js', extensions: '.js'}; + + if(answers.styles === 'less'){ + this.styles = {name: 'less', extensions: '.less'}; + }else if(answers.styles === 'sass'){ + this.styles = {name: 'sass', extensions: '.scss'}; + }else{ + this.styles = {name: 'css', extensions: '.css'}; + } + + if(answers.templates === 'jade'){ + this.templates = {name: 'jade', extensions: '.jade'}; + }else{ + this.templates = {name: 'html', extensions: '.html'}; + } + done(); }.bind(this)); }, + configuring: function () { + // Scripts this.isJs = function () { return this.scripts.name === 'js'; }; // Styles diff --git a/generators/app/templates/_bower.json b/app/templates/_bower.json similarity index 100% rename from generators/app/templates/_bower.json rename to app/templates/_bower.json diff --git a/generators/app/templates/_gulpfile.js b/app/templates/_gulpfile.js similarity index 100% rename from generators/app/templates/_gulpfile.js rename to app/templates/_gulpfile.js diff --git a/generators/app/templates/_package.json b/app/templates/_package.json similarity index 100% rename from generators/app/templates/_package.json rename to app/templates/_package.json diff --git a/generators/app/templates/editorconfig b/app/templates/editorconfig similarity index 100% rename from generators/app/templates/editorconfig rename to app/templates/editorconfig diff --git a/generators/app/templates/gitignore b/app/templates/gitignore similarity index 100% rename from generators/app/templates/gitignore rename to app/templates/gitignore diff --git a/app/templates/gulp/config.js b/app/templates/gulp/config.js new file mode 100644 index 0000000..9ddf6eb --- /dev/null +++ b/app/templates/gulp/config.js @@ -0,0 +1,205 @@ +'use strict'; + +var path = require('path'); +var utilities = require('./utilities'); + +// Folders & files names +var src = './src'; +var assets = 'assets'; +var assets_images = 'images'; +var scripts = 'scripts'; +var scripts_app = 'app'; +var scripts_app_entry = 'app.module<%=scripts.extensions%>'; +var scripts_app_vendors = 'vendors<%=scripts.extensions%>'; +var scripts_config = utilities.config.getFile() || (utilities.env.getEnv() + '.config.json'); +var scripts_index = 'index<%=templates.extensions%>'; +var scripts_app_output = 'app.js'; +var scripts_app_output_partial = 'app*'; +var scripts_vendors_output = 'vendors.js'; +var scripts_vendors_output_partial = 'vendors*'; +var styles = 'styles'; +var styles_main = 'main<%=styles.extensions%>'; +var styles_output = 'app'; +var build = './build'; +var dist = './dist'; +var tmp = './.tmp'; +var tmp_config_module = '<%=project%>.config'; +var tmp_config_output = 'config'; +var tmp_templates_module = '<%=project%>.templates'; +var tmp_templates_output = 'templates.js'; + +var dest = utilities.env.isDev() ? build : dist; + +// Configuration for each task +var configuration = { + assets: { + src: path.join(src, assets, '**/*'), + imagesFilter: path.join(assets_images, '**/*'), + imagemin: {optimizationLevel: 5, progressive: true, interlaced: true}, + dest: path.join(dest, assets) + }, + browserify: { + app: { + browserify: { + cache: {}, packageCache: {}, fullPaths: true, + entries: ['./' + path.join(src, scripts, scripts_app, scripts_app_entry)], + debug: true + }, + output: scripts_app_output, + dest: dest + }, + + vendors: { + browserify: { + cache: {}, packageCache: {}, fullPaths: true, + entries: ['./' + path.join(src, scripts, scripts_app, scripts_app_vendors)] + }, + output: scripts_vendors_output, + dest: dest + } + }, + clean: { + src: [ + path.join(dest, '**/*'), + path.join(tmp, '**/*') + ] + }, + config: { + src: path.join(src, scripts, scripts_config), + rename: { + basename: tmp_config_output + }, + ngConstant: { + name: tmp_config_module, + constants: utilities.config.getConstants(), + wrap: 'commonjs' + }, + dest: tmp + }, + index: { + src: path.join(src, scripts, scripts_index), + injectSrc: [ + path.join(dest, scripts_vendors_output_partial + '.js'), + path.join(dest, scripts_app_output_partial + '.{css,js}') + ], + inject: { + ignorePath: path.join(dest), + addRootSlash: false + }, + < % if (isHtml()) +{ %> + minifyHtml < % +} +else +if (isJade()) { %> + jade < % +} +%>: +{ +} +, +dest: dest +}, +lint: { + src: path.join(src, '**/*<%=scripts.extensions%>') +} +, +serve: { + browserSync: { + server: { + baseDir: dest + } + , + open: false + } +} +, +styles: { + src: path.join(src, styles, styles_main), + basename +: + styles_output, + autoprefixer +: + { + browsers: ['last 2 versions'] + } +, +<% + if (isSass()) { %> + sass: { + sourcemap: utilities.env.isDev(), + style + : + 'compressed' + } + ,<% + } else if (isLess()) { %> + less: { + } + ,<% + } +%> + dest: dest +} +, +templates: { + src: path.join(src, scripts, scripts_app, '**/*<%=templates.extensions%>'), +<% + if (isHtml()) { %> + minifyHTML < % + } else if (isJade()) { %> + jade < % + } +%>: + { + } +, + templateCache: { + filename: tmp_templates_output, + options + : + { + moduleSystem: 'Browserify', + standalone + : + true, + module + : + tmp_templates_module, + base + : + function (file) { + return path.basename(file.relative); + } + } + } +, + dest: tmp +} +, +watch: { + lint: path.join(src, scripts, scripts_app, '**/*<%=scripts.extensions%>'), + index +: + path.join(src, scripts, scripts_index), + config +: + path.join(src, scripts, scripts_config), + templates +: + path.join(src, scripts, scripts_app, '**/*<%=templates.extensions%>'), + styles +: + path.join(src, styles, '**/*<%=styles.extensions%>'), + styles_output +: + styles_output + '.min.css', + reload +: + path.join(dest, '**/*.{js,html}') +} +} +; + +module.exports = configuration; diff --git a/generators/app/templates/gulp/tasks/scripts/js/browserify-app.js b/app/templates/gulp/tasks/scripts/js/browserify-app.js similarity index 100% rename from generators/app/templates/gulp/tasks/scripts/js/browserify-app.js rename to app/templates/gulp/tasks/scripts/js/browserify-app.js diff --git a/generators/app/templates/gulp/tasks/scripts/js/lint.js b/app/templates/gulp/tasks/scripts/js/lint.js similarity index 100% rename from generators/app/templates/gulp/tasks/scripts/js/lint.js rename to app/templates/gulp/tasks/scripts/js/lint.js diff --git a/generators/app/templates/gulp/tasks/shared/assets.js b/app/templates/gulp/tasks/shared/assets.js similarity index 100% rename from generators/app/templates/gulp/tasks/shared/assets.js rename to app/templates/gulp/tasks/shared/assets.js diff --git a/generators/app/templates/gulp/tasks/shared/browserify-vendors.js b/app/templates/gulp/tasks/shared/browserify-vendors.js similarity index 100% rename from generators/app/templates/gulp/tasks/shared/browserify-vendors.js rename to app/templates/gulp/tasks/shared/browserify-vendors.js diff --git a/generators/app/templates/gulp/tasks/shared/clean.js b/app/templates/gulp/tasks/shared/clean.js similarity index 100% rename from generators/app/templates/gulp/tasks/shared/clean.js rename to app/templates/gulp/tasks/shared/clean.js diff --git a/generators/app/templates/gulp/tasks/shared/config.js b/app/templates/gulp/tasks/shared/config.js similarity index 100% rename from generators/app/templates/gulp/tasks/shared/config.js rename to app/templates/gulp/tasks/shared/config.js diff --git a/generators/app/templates/gulp/tasks/shared/default.js b/app/templates/gulp/tasks/shared/default.js similarity index 100% rename from generators/app/templates/gulp/tasks/shared/default.js rename to app/templates/gulp/tasks/shared/default.js diff --git a/generators/app/templates/gulp/tasks/shared/serve.js b/app/templates/gulp/tasks/shared/serve.js similarity index 100% rename from generators/app/templates/gulp/tasks/shared/serve.js rename to app/templates/gulp/tasks/shared/serve.js diff --git a/generators/app/templates/gulp/tasks/shared/watch.js b/app/templates/gulp/tasks/shared/watch.js similarity index 100% rename from generators/app/templates/gulp/tasks/shared/watch.js rename to app/templates/gulp/tasks/shared/watch.js diff --git a/generators/app/templates/gulp/tasks/styles/css/styles.js b/app/templates/gulp/tasks/styles/css/styles.js similarity index 100% rename from generators/app/templates/gulp/tasks/styles/css/styles.js rename to app/templates/gulp/tasks/styles/css/styles.js diff --git a/generators/app/templates/gulp/tasks/styles/less/styles.js b/app/templates/gulp/tasks/styles/less/styles.js similarity index 100% rename from generators/app/templates/gulp/tasks/styles/less/styles.js rename to app/templates/gulp/tasks/styles/less/styles.js diff --git a/generators/app/templates/gulp/tasks/styles/sass/styles.js b/app/templates/gulp/tasks/styles/sass/styles.js similarity index 100% rename from generators/app/templates/gulp/tasks/styles/sass/styles.js rename to app/templates/gulp/tasks/styles/sass/styles.js diff --git a/generators/app/templates/gulp/tasks/templates/html/index.js b/app/templates/gulp/tasks/templates/html/index.js similarity index 100% rename from generators/app/templates/gulp/tasks/templates/html/index.js rename to app/templates/gulp/tasks/templates/html/index.js diff --git a/generators/app/templates/gulp/tasks/templates/html/templates.js b/app/templates/gulp/tasks/templates/html/templates.js similarity index 100% rename from generators/app/templates/gulp/tasks/templates/html/templates.js rename to app/templates/gulp/tasks/templates/html/templates.js diff --git a/generators/app/templates/gulp/tasks/templates/jade/index.js b/app/templates/gulp/tasks/templates/jade/index.js similarity index 100% rename from generators/app/templates/gulp/tasks/templates/jade/index.js rename to app/templates/gulp/tasks/templates/jade/index.js diff --git a/generators/app/templates/gulp/tasks/templates/jade/templates.js b/app/templates/gulp/tasks/templates/jade/templates.js similarity index 100% rename from generators/app/templates/gulp/tasks/templates/jade/templates.js rename to app/templates/gulp/tasks/templates/jade/templates.js diff --git a/generators/app/templates/gulp/utilities.js b/app/templates/gulp/utilities.js similarity index 100% rename from generators/app/templates/gulp/utilities.js rename to app/templates/gulp/utilities.js diff --git a/generators/app/templates/jshintrc b/app/templates/jshintrc similarity index 100% rename from generators/app/templates/jshintrc rename to app/templates/jshintrc diff --git a/generators/app/templates/src/assets/images/angulpify.png b/app/templates/src/assets/images/angulpify.png similarity index 100% rename from generators/app/templates/src/assets/images/angulpify.png rename to app/templates/src/assets/images/angulpify.png diff --git a/generators/app/templates/src/scripts/app/app.config.js b/app/templates/src/scripts/app/app.config.js similarity index 100% rename from generators/app/templates/src/scripts/app/app.config.js rename to app/templates/src/scripts/app/app.config.js diff --git a/generators/app/templates/src/scripts/app/app.module.js b/app/templates/src/scripts/app/app.module.js similarity index 100% rename from generators/app/templates/src/scripts/app/app.module.js rename to app/templates/src/scripts/app/app.module.js diff --git a/generators/app/templates/src/scripts/app/core/core.module.js b/app/templates/src/scripts/app/core/core.module.js similarity index 100% rename from generators/app/templates/src/scripts/app/core/core.module.js rename to app/templates/src/scripts/app/core/core.module.js diff --git a/generators/app/templates/src/scripts/app/layout/layout.config.js b/app/templates/src/scripts/app/layout/layout.config.js similarity index 100% rename from generators/app/templates/src/scripts/app/layout/layout.config.js rename to app/templates/src/scripts/app/layout/layout.config.js diff --git a/generators/app/templates/src/scripts/app/layout/layout.html b/app/templates/src/scripts/app/layout/layout.html similarity index 100% rename from generators/app/templates/src/scripts/app/layout/layout.html rename to app/templates/src/scripts/app/layout/layout.html diff --git a/generators/app/templates/src/scripts/app/layout/layout.jade b/app/templates/src/scripts/app/layout/layout.jade similarity index 100% rename from generators/app/templates/src/scripts/app/layout/layout.jade rename to app/templates/src/scripts/app/layout/layout.jade diff --git a/generators/app/templates/src/scripts/app/layout/layout.module.js b/app/templates/src/scripts/app/layout/layout.module.js similarity index 100% rename from generators/app/templates/src/scripts/app/layout/layout.module.js rename to app/templates/src/scripts/app/layout/layout.module.js diff --git a/generators/app/templates/src/scripts/app/vendors.js b/app/templates/src/scripts/app/vendors.js similarity index 100% rename from generators/app/templates/src/scripts/app/vendors.js rename to app/templates/src/scripts/app/vendors.js diff --git a/generators/app/templates/src/scripts/app/welcome/welcome.config.js b/app/templates/src/scripts/app/welcome/welcome.config.js similarity index 100% rename from generators/app/templates/src/scripts/app/welcome/welcome.config.js rename to app/templates/src/scripts/app/welcome/welcome.config.js diff --git a/generators/app/templates/src/scripts/app/welcome/welcome.controller.js b/app/templates/src/scripts/app/welcome/welcome.controller.js similarity index 100% rename from generators/app/templates/src/scripts/app/welcome/welcome.controller.js rename to app/templates/src/scripts/app/welcome/welcome.controller.js diff --git a/generators/app/templates/src/scripts/app/welcome/welcome.html b/app/templates/src/scripts/app/welcome/welcome.html similarity index 100% rename from generators/app/templates/src/scripts/app/welcome/welcome.html rename to app/templates/src/scripts/app/welcome/welcome.html diff --git a/generators/app/templates/src/scripts/app/welcome/welcome.jade b/app/templates/src/scripts/app/welcome/welcome.jade similarity index 100% rename from generators/app/templates/src/scripts/app/welcome/welcome.jade rename to app/templates/src/scripts/app/welcome/welcome.jade diff --git a/generators/app/templates/src/scripts/app/welcome/welcome.module.js b/app/templates/src/scripts/app/welcome/welcome.module.js similarity index 100% rename from generators/app/templates/src/scripts/app/welcome/welcome.module.js rename to app/templates/src/scripts/app/welcome/welcome.module.js diff --git a/generators/app/templates/src/scripts/dev.config.json b/app/templates/src/scripts/dev.config.json similarity index 100% rename from generators/app/templates/src/scripts/dev.config.json rename to app/templates/src/scripts/dev.config.json diff --git a/generators/app/templates/src/scripts/index.html b/app/templates/src/scripts/index.html similarity index 100% rename from generators/app/templates/src/scripts/index.html rename to app/templates/src/scripts/index.html diff --git a/generators/app/templates/src/scripts/index.jade b/app/templates/src/scripts/index.jade similarity index 100% rename from generators/app/templates/src/scripts/index.jade rename to app/templates/src/scripts/index.jade diff --git a/generators/app/templates/src/scripts/prod.config.json b/app/templates/src/scripts/prod.config.json similarity index 100% rename from generators/app/templates/src/scripts/prod.config.json rename to app/templates/src/scripts/prod.config.json diff --git a/generators/app/templates/src/styles/_layout.scss b/app/templates/src/styles/_layout.scss similarity index 100% rename from generators/app/templates/src/styles/_layout.scss rename to app/templates/src/styles/_layout.scss diff --git a/generators/app/templates/src/styles/_variables.scss b/app/templates/src/styles/_variables.scss similarity index 100% rename from generators/app/templates/src/styles/_variables.scss rename to app/templates/src/styles/_variables.scss diff --git a/generators/app/templates/src/styles/layout.css b/app/templates/src/styles/layout.css similarity index 100% rename from generators/app/templates/src/styles/layout.css rename to app/templates/src/styles/layout.css diff --git a/generators/app/templates/src/styles/layout.less b/app/templates/src/styles/layout.less similarity index 100% rename from generators/app/templates/src/styles/layout.less rename to app/templates/src/styles/layout.less diff --git a/generators/app/templates/src/styles/main.css b/app/templates/src/styles/main.css similarity index 100% rename from generators/app/templates/src/styles/main.css rename to app/templates/src/styles/main.css diff --git a/generators/app/templates/src/styles/main.less b/app/templates/src/styles/main.less similarity index 100% rename from generators/app/templates/src/styles/main.less rename to app/templates/src/styles/main.less diff --git a/generators/app/templates/src/styles/main.scss b/app/templates/src/styles/main.scss similarity index 100% rename from generators/app/templates/src/styles/main.scss rename to app/templates/src/styles/main.scss diff --git a/generators/app/templates/src/styles/variables.less b/app/templates/src/styles/variables.less similarity index 100% rename from generators/app/templates/src/styles/variables.less rename to app/templates/src/styles/variables.less diff --git a/generators/app/templates/gulp/config.js b/generators/app/templates/gulp/config.js deleted file mode 100644 index e7f7658..0000000 --- a/generators/app/templates/gulp/config.js +++ /dev/null @@ -1,138 +0,0 @@ -'use strict'; - -var path = require('path'); -var utilities = require('./utilities'); - -// Folders & files names -var src = './src'; - var assets = 'assets'; - var assets_images = 'images'; - var scripts = 'scripts'; - var scripts_app = 'app'; - var scripts_app_entry = 'app.module<%=scripts.extensions%>'; - var scripts_app_vendors = 'vendors<%=scripts.extensions%>'; - var scripts_config = utilities.config.getFile() || (utilities.env.getEnv() + '.config.json'); - var scripts_index = 'index<%=templates.extensions%>'; - var scripts_app_output = 'app.js'; - var scripts_app_output_partial = 'app*'; - var scripts_vendors_output = 'vendors.js'; - var scripts_vendors_output_partial = 'vendors*'; - var styles = 'styles'; - var styles_main = 'main<%=styles.extensions%>'; - var styles_output = 'app'; -var build = './build'; -var dist = './dist'; -var tmp = './.tmp'; - var tmp_config_module = '<%=project%>.config'; - var tmp_config_output = 'config'; - var tmp_templates_module = '<%=project%>.templates'; - var tmp_templates_output = 'templates.js'; - -var dest = utilities.env.isDev() ? build : dist; - -// Configuration for each task -var configuration = { - assets: { - src: path.join(src, assets, '**/*'), - imagesFilter: path.join(assets_images, '**/*'), - imagemin: { optimizationLevel: 5, progressive: true, interlaced: true }, - dest: path.join(dest, assets) - }, - browserify: { - app: { - browserify: { - cache: {}, packageCache: {}, fullPaths: true, - entries: ['./' + path.join(src, scripts, scripts_app, scripts_app_entry)], - debug: true - }, - output: scripts_app_output, - dest: dest - }, - - vendors: { - browserify: { - cache: {}, packageCache: {}, fullPaths: true, - entries: ['./' + path.join(src, scripts, scripts_app, scripts_app_vendors)] - }, - output: scripts_vendors_output, - dest: dest - } - }, - clean: { - src: [ - path.join(dest, '**/*'), - path.join(tmp, '**/*') - ] - }, - config: { - src: path.join(src, scripts, scripts_config), - rename: { - basename: tmp_config_output - }, - ngConstant: { - name: tmp_config_module, - constants: utilities.config.getConstants(), - wrap: 'commonjs' - }, - dest: tmp - }, - index: { - src: path.join(src, scripts, scripts_index), - injectSrc: [ - path.join(dest, scripts_vendors_output_partial + '.js'), - path.join(dest, scripts_app_output_partial + '.{css,js}') - ], - inject: { - ignorePath: path.join(dest), - addRootSlash: false - }, - <% if (isHtml()) { %>minifyHtml<% } else if (isJade()) { %>jade<% } %>: {}, - dest: dest - }, - lint: { - src: path.join(src, '**/*<%=scripts.extensions%>') - }, - serve: { - browserSync: { - server: {baseDir: dest}, - open: false - } - }, - styles: { - src: path.join(src, styles, styles_main), - basename: styles_output, - autoprefixer: {browsers: ['last 2 versions']}, - <% if (isSass()) { %>sass: { - sourcemap: utilities.env.isDev(), - style: 'compressed' - },<% } else if (isLess()) { %>less: {},<% } %> - dest: dest - }, - templates: { - src: path.join(src, scripts, scripts_app, '**/*<%=templates.extensions%>'), - <% if (isHtml()) { %>minifyHTML<% } else if (isJade()) { %>jade<% } %>: {}, - templateCache: { - filename: tmp_templates_output, - options: { - moduleSystem: 'Browserify', - standalone: true, - module: tmp_templates_module, - base: function (file) { - return path.basename(file.relative); - } - } - }, - dest: tmp - }, - watch: { - lint: path.join(src, scripts, scripts_app, '**/*<%=scripts.extensions%>'), - index: path.join(src, scripts, scripts_index), - config: path.join(src, scripts, scripts_config), - templates: path.join(src, scripts, scripts_app, '**/*<%=templates.extensions%>'), - styles: path.join(src, styles, '**/*<%=styles.extensions%>'), - styles_output: styles_output + '.min.css', - reload: path.join(dest, '**/*.{js,html}') - } -}; - -module.exports = configuration; diff --git a/package.json b/package.json index d2d403c..2055f1f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "generator-angulpify", "version": "1.0.0", - "description": "Yeoman generator involving AngularJS, Gulp and Browserify", + "description": "Yeoman generator for AngularJS apps using Gulp and Browserify", "license": "MIT", "repository": "jgoux/generator-angulpify", "author": { @@ -9,13 +9,16 @@ "email": "julien.goux@live.fr", "url": "https://github.com/jgoux" }, + "main": "app/index.js", "engines": { - "node": ">=0.10.0", - "npm": ">=1.3" + "node": ">=0.10.0" }, "scripts": { - "test": "mocha --reporter spec" + "test": "mocha" }, + "files": [ + "app" + ], "keywords": [ "yeoman-generator", "angularjs", @@ -32,6 +35,9 @@ "yosay": "^1.0.0" }, "devDependencies": { - "mocha": "^2.0.1" + "mocha": "*" + }, + "peerDependencies": { + "yo": ">=1.0.0" } } diff --git a/test/jade.js b/test/jade.js index 7ffdaa7..6b6376b 100644 --- a/test/jade.js +++ b/test/jade.js @@ -2,42 +2,97 @@ 'use strict'; var path = require('path'); -var helpers = require('yeoman-generator').test; var assert = require('yeoman-generator').assert; +var helpers = require('yeoman-generator').test; +var os = require('os'); + +describe('angulpify: jade', function () { -describe('angulpify: jade feature', function () { + var promptOptions = { + project: 'angulpify', + styles: 'css', + templates: 'jade' + } - var mockPrompts = { - projectName: 'angulpify', - language: 'includeJavaScript', - preprocessor: 'includeCss', - templateEngine: 'includeJade', - goodies: [] + var options = { + 'skip-install-message': true, + 'skip-install': true, + 'skip-welcome-message': true, + 'skip-message': true }; - beforeEach(function (done) { - helpers.testDirectory(path.join(__dirname, 'tmp'), function (err) { - if (err) { - return done(err); - } - this.angulpify = helpers.createGenerator('angulpify:app', ['../../generators/app']); - this.angulpify.options['skip-install'] = true; - this.angulpify.options['skip-welcome-message'] = true; + before(function (done) { + helpers.run(path.join(__dirname, '../app')) + .inDir(path.join(os.tmpdir(), './temp-test')) + .withOptions(options) + .withPrompt(promptOptions) + .on('end', done); + }); + + + it('creates expected config files', function () { - helpers.mockPrompt(this.angulpify, mockPrompts); + var expected = [ + '.editorconfig', + '.gitignore', + '.jshintrc', + '.yo-rc.json' + ]; - done(); - }.bind(this)); + assert.file(expected); }); - it('creates expected files', function (done) { + + it('creates expected gulp files', function () { var expected = [ - 'src/index.jade', - 'src/modules/app/foo/layout.jade' + 'gulpfile.js', + 'gulp/config.js', + 'gulp/utilities.js', + 'gulp/tasks/assets.js', + 'gulp/tasks/browserify-app.js', + 'gulp/tasks/browserify-vendors.js', + 'gulp/tasks/clean.js', + 'gulp/tasks/default.js', + // 'gulp/tasks/images.js', + 'gulp/tasks/index.js', + 'gulp/tasks/lint.js', + //'gulp/tasks/minify.js', + 'gulp/tasks/serve.js', + 'gulp/tasks/styles.js', + 'gulp/tasks/templates.js', + 'gulp/tasks/watch.js', + //'gulp/tasks/watchify.js' ]; - this.angulpify.run({}, function () { - assert.file(expected); - done(); - }); + + assert.file(expected); }); + + it('creates expected script files', function () { + var expected = [ + 'src/scripts/app/app.config.js', + 'src/scripts/app/app.module.js', + 'src/scripts/app/vendors.js', + 'src/scripts/app/core/core.module.js', + 'src/scripts/app/layout/layout.config.js', + 'src/scripts/app/layout/layout.module.js', + 'src/scripts/app/welcome/welcome.config.js', + 'src/scripts/app/welcome/welcome.controller.js', + 'src/scripts/app/welcome/welcome.module.js' + ]; + + assert.file(expected); + + }); + + + it('creates expected template files', function () { + var expected = [ + 'src/scripts/index.jade', + 'src/scripts/app/layout/layout.jade', + 'src/scripts/app/welcome/welcome.jade' + ]; + + assert.file(expected); + }); + }); diff --git a/test/sass.js b/test/sass.js index 3167ab4..d20b01d 100644 --- a/test/sass.js +++ b/test/sass.js @@ -2,66 +2,107 @@ 'use strict'; var path = require('path'); -var helpers = require('yeoman-generator').test; var assert = require('yeoman-generator').assert; +var helpers = require('yeoman-generator').test; +var os = require('os'); -describe('angulpify: sass feature', function () { +describe('angulpify: sass', function () { - var mockPrompts = { - projectName: 'angulpify', - language: 'includeJavaScript', - preprocessor: 'includeSass', - templateEngine: 'includeHtml', - goodies: [] + var promptOptions = { + project: 'angulpify', + styles: 'sass', + templates: 'html' + } + + var options = { + 'skip-install-message': true, + 'skip-install': true, + 'skip-welcome-message': true, + 'skip-message': true }; - beforeEach(function (done) { - helpers.testDirectory(path.join(__dirname, 'tmp'), function (err) { - if (err) { - return done(err); - } - this.angulpify = helpers.createGenerator('angulpify:app', ['../../generators/app']); - this.angulpify.options['skip-install'] = true; - this.angulpify.options['skip-welcome-message'] = true; + before(function (done) { + helpers.run(path.join(__dirname, '../app')) + .inDir(path.join(os.tmpdir(), './temp-test')) + .withOptions(options) + .withPrompt(promptOptions) + .on('end', done); + }); - helpers.mockPrompt(this.angulpify, mockPrompts); - done(); - }.bind(this)); + it('creates expected config files', function () { + + var expected = [ + '.editorconfig', + '.gitignore', + '.jshintrc', + '.yo-rc.json' + ]; + + assert.file(expected); }); - it('creates expected files', function (done) { + + it('creates expected gulp files', function () { var expected = [ - 'src/styles/app.scss', - 'src/styles/_imports.scss', - 'src/styles/_variables.scss', + 'gulpfile.js', + 'gulp/config.js', + 'gulp/utilities.js', + 'gulp/tasks/assets.js', + 'gulp/tasks/browserify-app.js', + 'gulp/tasks/browserify-vendors.js', + 'gulp/tasks/clean.js', + 'gulp/tasks/default.js', + // 'gulp/tasks/images.js', + 'gulp/tasks/index.js', + 'gulp/tasks/lint.js', + //'gulp/tasks/minify.js', + 'gulp/tasks/serve.js', + 'gulp/tasks/styles.js', + 'gulp/tasks/templates.js', + 'gulp/tasks/watch.js', + //'gulp/tasks/watchify.js' + ]; + + assert.file(expected); + }); + + it('creates expected script files', function () { + var expected = [ + 'src/scripts/app/app.config.js', + 'src/scripts/app/app.module.js', + 'src/scripts/app/vendors.js', + 'src/scripts/app/core/core.module.js', + 'src/scripts/app/layout/layout.config.js', + 'src/scripts/app/layout/layout.module.js', + 'src/scripts/app/welcome/welcome.config.js', + 'src/scripts/app/welcome/welcome.controller.js', + 'src/scripts/app/welcome/welcome.module.js' ]; - this.angulpify.run({}, function () { - assert.file(expected); - assert.fileContent('src/styles/_imports.scss', /You can @import all your bower_components \.sass files here/); - assert.fileContent('src/styles/_variables.scss', /You can add\/overwrite all your bower_components \.sass variables here/); - done(); - }); + + assert.file(expected); + }); - /*it('creates expected files with Bootstrap', function (done) { + it('creates expected sass files', function () { var expected = [ - 'src/styles/app.scss', - 'src/styles/_imports.scss', + 'src/styles/_layout.scss', 'src/styles/_variables.scss', + 'src/styles/main.scss' ]; - helpers.mockPrompt(this.angulpify, { - projectName: 'angulpify', - language: 'includeJavascript', - preprocessor: 'includeSass', - templateEngine: 'includeHtml', - goodies: ['includeBootstrap'] - }); - this.angulpify.run({}, function () { - assert.file(expected); - assert.fileContent('src/styles/_imports.scss', /Bootstrap-sass-official \(you can comment unused files\)/); - assert.fileContent('src/styles/_variables.scss', /Bootstrap-sass-official/); - done(); - }); - });*/ + + assert.file(expected); + + }); + + it('creates expected template files', function () { + var expected = [ + 'src/scripts/index.html', + 'src/scripts/app/layout/layout.html', + 'src/scripts/app/welcome/welcome.html' + ]; + + assert.file(expected); + }); + }); diff --git a/test/test.js b/test/test.js index 40fe298..b911618 100644 --- a/test/test.js +++ b/test/test.js @@ -2,116 +2,111 @@ 'use strict'; var path = require('path'); -var helpers = require('yeoman-generator').test; var assert = require('yeoman-generator').assert; +var helpers = require('yeoman-generator').test; +var os = require('os'); describe('angulpify: default features (javascript/css/html)', function () { - var mockPrompts = { - projectName: 'angulpify', - language: 'includeJavaScript', - preprocessor: 'includeCss', - templateEngine: 'includeHtml', - goodies: [] - }; + // not testing the actual run of generators yet + it('the generator can be required without throwing', function () { + this.app = require('../app'); + }); - beforeEach(function (done) { - helpers.testDirectory(path.join(__dirname, 'tmp'), function (err) { - if (err) { - return done(err); - } - this.angulpify = helpers.createGenerator('angulpify:app', ['../../generators/app']); - this.angulpify.options['skip-install'] = true; - this.angulpify.options['skip-welcome-message'] = true; + var promptOptions = { + project: 'angulpify', + styles: 'css', + templates: 'html' + } - helpers.mockPrompt(this.angulpify, mockPrompts); + var options = { + 'skip-install-message': true, + 'skip-install': true, + 'skip-welcome-message': true, + 'skip-message': true + }; - done(); - }.bind(this)); + before(function (done) { + helpers.run(path.join(__dirname, '../app')) + .inDir(path.join(os.tmpdir(), './temp-test')) + .withOptions(options) + .withPrompt(promptOptions) + .on('end', done); }); - it('can be imported without blowing up', function () { - this.app = require('../generators/app'); - assert(this.app !== undefined); - }); - it('creates expected config files', function (done) { - var expected = [ - '.editorconfig', - '.gitignore', - '.jshintrc', - '.yo-rc.json' - ]; - this.angulpify.run({}, function () { + it('creates expected config files', function () { + + var expected = [ + '.editorconfig', + '.gitignore', + '.jshintrc', + '.yo-rc.json' + ]; + assert.file(expected); - done(); - }); }); - it('creates expected gulp files', function (done) { + + it('creates expected gulp files', function () { var expected = [ 'gulpfile.js', 'gulp/config.js', - 'gulp/index.js', + 'gulp/utilities.js', 'gulp/tasks/assets.js', - 'gulp/tasks/browserify.js', + 'gulp/tasks/browserify-app.js', + 'gulp/tasks/browserify-vendors.js', 'gulp/tasks/clean.js', 'gulp/tasks/default.js', - 'gulp/tasks/images.js', + // 'gulp/tasks/images.js', 'gulp/tasks/index.js', 'gulp/tasks/lint.js', - 'gulp/tasks/minify.js', + //'gulp/tasks/minify.js', 'gulp/tasks/serve.js', 'gulp/tasks/styles.js', 'gulp/tasks/templates.js', 'gulp/tasks/watch.js', - 'gulp/tasks/watchify.js' + //'gulp/tasks/watchify.js' ]; - this.angulpify.run({}, function () { - assert.file(expected); - done(); - }); + + assert.file(expected); }); - it('creates expected script files', function (done) { + it('creates expected script files', function () { var expected = [ - 'src/modules/index.js', - 'src/modules/app/foo/fooController.js', - 'src/modules/app/foo/index.js', - 'src/modules/app/index.js', - 'src/modules/common/directives/fooDirective.js', - 'src/modules/common/directives/index.js', - 'src/modules/common/filters/fooFilter.js', - 'src/modules/common/filters/index.js', - 'src/modules/common/services/fooService.js', - 'src/modules/common/services/index.js', - 'src/modules/common/index.js' + 'src/scripts/app/app.config.js', + 'src/scripts/app/app.module.js', + 'src/scripts/app/vendors.js', + 'src/scripts/app/core/core.module.js', + 'src/scripts/app/layout/layout.config.js', + 'src/scripts/app/layout/layout.module.js', + 'src/scripts/app/welcome/welcome.config.js', + 'src/scripts/app/welcome/welcome.controller.js', + 'src/scripts/app/welcome/welcome.module.js' ]; - this.angulpify.run({}, function () { - assert.file(expected); - done(); - }); + + assert.file(expected); + }); - it('creates expected style files', function (done) { + it('creates expected style files', function () { var expected = [ - 'src/styles/app.css' + 'src/styles/layout.css', + 'src/styles/main.css' ]; - this.angulpify.run({}, function () { - assert.file(expected); - done(); - }); + + assert.file(expected); + }); - it('creates expected template files', function (done) { + it('creates expected template files', function () { var expected = [ - 'src/index.html', - 'src/modules/app/foo/layout.html' + 'src/scripts/index.html', + 'src/scripts/app/layout/layout.html', + 'src/scripts/app/welcome/welcome.html' ]; - this.angulpify.run({}, function () { - assert.file(expected); - done(); - }); + + assert.file(expected); }); }); From 686e3c2683ae0f6f5a5fcc393438187440fb006a Mon Sep 17 00:00:00 2001 From: gaboesquivel Date: Mon, 8 Dec 2014 06:39:20 -0600 Subject: [PATCH 3/4] remove gruntfile --- Gruntfile.js | 392 --------------------------------------------------- 1 file changed, 392 deletions(-) delete mode 100644 Gruntfile.js diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 57cde6f..0000000 --- a/Gruntfile.js +++ /dev/null @@ -1,392 +0,0 @@ -/*jshint node:true*/ - -// Generated on 2014-12-08 using -// generator-webapp 0.5.1 -'use strict'; - -// # Globbing -// for performance reasons we're only matching one level down: -// 'test/spec/{,*/}*.js' -// If you want to recursively match all subfolders, use: -// 'test/spec/**/*.js' - -module.exports = function (grunt) { - - // Time how long tasks take. Can help when optimizing build times - require('time-grunt')(grunt); - - // Load grunt tasks automatically - require('load-grunt-tasks')(grunt); - - // Configurable paths - var config = { - app: 'app', - dist: 'dist' - }; - - // Define the configuration for all the tasks - grunt.initConfig({ - - // Project settings - config: config, - - // Watches files for changes and runs tasks based on the changed files - watch: { - bower: { - files: ['bower.json'], - tasks: ['wiredep'] - }, - js: { - files: ['<%= config.app %>/scripts/{,*/}*.js'], - tasks: ['jshint'], - options: { - livereload: true - } - }, - jstest: { - files: ['test/spec/{,*/}*.js'], - tasks: ['test:watch'] - }, - gruntfile: { - files: ['Gruntfile.js'] - }, - styles: { - files: ['<%= config.app %>/styles/{,*/}*.css'], - tasks: ['newer:copy:styles', 'autoprefixer'] - }, - livereload: { - options: { - livereload: '<%= connect.options.livereload %>' - }, - files: [ - '<%= config.app %>/{,*/}*.html', - '.tmp/styles/{,*/}*.css', - '<%= config.app %>/images/{,*/}*' - ] - } - }, - - // The actual grunt server settings - connect: { - options: { - port: 9000, - open: true, - livereload: 35729, - // Change this to '0.0.0.0' to access the server from outside - hostname: 'localhost' - }, - livereload: { - options: { - middleware: function(connect) { - return [ - connect.static('.tmp'), - connect().use('/bower_components', connect.static('./bower_components')), - connect.static(config.app) - ]; - } - } - }, - test: { - options: { - open: false, - port: 9001, - middleware: function(connect) { - return [ - connect.static('.tmp'), - connect.static('test'), - connect().use('/bower_components', connect.static('./bower_components')), - connect.static(config.app) - ]; - } - } - }, - dist: { - options: { - base: '<%= config.dist %>', - livereload: false - } - } - }, - - // Empties folders to start fresh - clean: { - dist: { - files: [{ - dot: true, - src: [ - '.tmp', - '<%= config.dist %>/*', - '!<%= config.dist %>/.git*' - ] - }] - }, - server: '.tmp' - }, - - // Make sure code styles are up to par and there are no obvious mistakes - jshint: { - options: { - jshintrc: '.jshintrc', - reporter: require('jshint-stylish') - }, - all: [ - 'Gruntfile.js', - '<%= config.app %>/scripts/{,*/}*.js', - '!<%= config.app %>/scripts/vendor/*', - 'test/spec/{,*/}*.js' - ] - }, - - // Mocha testing framework configuration options - mocha: { - all: { - options: { - run: true, - urls: ['http://<%= connect.test.options.hostname %>:<%= connect.test.options.port %>/index.html'] - } - } - }, - - // Add vendor prefixed styles - autoprefixer: { - options: { - browsers: ['> 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1'] - }, - dist: { - files: [{ - expand: true, - cwd: '.tmp/styles/', - src: '{,*/}*.css', - dest: '.tmp/styles/' - }] - } - }, - - // Automatically inject Bower components into the HTML file - wiredep: { - app: { - ignorePath: /^\/|\.\.\//, - src: ['<%= config.app %>/index.html'], - exclude: ['bower_components/bootstrap/dist/js/bootstrap.js'] - } - }, - - // Renames files for browser caching purposes - rev: { - dist: { - files: { - src: [ - '<%= config.dist %>/scripts/{,*/}*.js', - '<%= config.dist %>/styles/{,*/}*.css', - '<%= config.dist %>/images/{,*/}*.*', - '<%= config.dist %>/styles/fonts/{,*/}*.*', - '<%= config.dist %>/*.{ico,png}' - ] - } - } - }, - - // Reads HTML for usemin blocks to enable smart builds that automatically - // concat, minify and revision files. Creates configurations in memory so - // additional tasks can operate on them - useminPrepare: { - options: { - dest: '<%= config.dist %>' - }, - html: '<%= config.app %>/index.html' - }, - - // Performs rewrites based on rev and the useminPrepare configuration - usemin: { - options: { - assetsDirs: [ - '<%= config.dist %>', - '<%= config.dist %>/images', - '<%= config.dist %>/styles' - ] - }, - html: ['<%= config.dist %>/{,*/}*.html'], - css: ['<%= config.dist %>/styles/{,*/}*.css'] - }, - - // The following *-min tasks produce minified files in the dist folder - imagemin: { - dist: { - files: [{ - expand: true, - cwd: '<%= config.app %>/images', - src: '{,*/}*.{gif,jpeg,jpg,png}', - dest: '<%= config.dist %>/images' - }] - } - }, - - svgmin: { - dist: { - files: [{ - expand: true, - cwd: '<%= config.app %>/images', - src: '{,*/}*.svg', - dest: '<%= config.dist %>/images' - }] - } - }, - - htmlmin: { - dist: { - options: { - collapseBooleanAttributes: true, - collapseWhitespace: true, - conservativeCollapse: true, - removeAttributeQuotes: true, - removeCommentsFromCDATA: true, - removeEmptyAttributes: true, - removeOptionalTags: true, - removeRedundantAttributes: true, - useShortDoctype: true - }, - files: [{ - expand: true, - cwd: '<%= config.dist %>', - src: '{,*/}*.html', - dest: '<%= config.dist %>' - }] - } - }, - - // By default, your `index.html`'s will take care - // of minification. These next options are pre-configured if you do not - // wish to use the Usemin blocks. - // cssmin: { - // dist: { - // files: { - // '<%= config.dist %>/styles/main.css': [ - // '.tmp/styles/{,*/}*.css', - // '<%= config.app %>/styles/{,*/}*.css' - // ] - // } - // } - // }, - // uglify: { - // dist: { - // files: { - // '<%= config.dist %>/scripts/scripts.js': [ - // '<%= config.dist %>/scripts/scripts.js' - // ] - // } - // } - // }, - // concat: { - // dist: {} - // }, - - // Copies remaining files to places other tasks can use - copy: { - dist: { - files: [{ - expand: true, - dot: true, - cwd: '<%= config.app %>', - dest: '<%= config.dist %>', - src: [ - '*.{ico,png,txt}', - 'images/{,*/}*.webp', - '{,*/}*.html', - 'styles/fonts/{,*/}*.*' - ] - }, { - src: 'node_modules/apache-server-configs/dist/.htaccess', - dest: '<%= config.dist %>/.htaccess' - }, { - expand: true, - dot: true, - cwd: 'bower_components/bootstrap/dist', - src: 'fonts/*', - dest: '<%= config.dist %>' - }] - }, - styles: { - expand: true, - dot: true, - cwd: '<%= config.app %>/styles', - dest: '.tmp/styles/', - src: '{,*/}*.css' - } - }, - - // Run some tasks in parallel to speed up build process - concurrent: { - server: [ - 'copy:styles' - ], - test: [ - 'copy:styles' - ], - dist: [ - 'copy:styles', - 'imagemin', - 'svgmin' - ] - } - }); - - - grunt.registerTask('serve', 'start the server and preview your app, --allow-remote for remote access', function (target) { - if (grunt.option('allow-remote')) { - grunt.config.set('connect.options.hostname', '0.0.0.0'); - } - if (target === 'dist') { - return grunt.task.run(['build', 'connect:dist:keepalive']); - } - - grunt.task.run([ - 'clean:server', - 'wiredep', - 'concurrent:server', - 'autoprefixer', - 'connect:livereload', - 'watch' - ]); - }); - - grunt.registerTask('server', function (target) { - grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.'); - grunt.task.run([target ? ('serve:' + target) : 'serve']); - }); - - grunt.registerTask('test', function (target) { - if (target !== 'watch') { - grunt.task.run([ - 'clean:server', - 'concurrent:test', - 'autoprefixer' - ]); - } - - grunt.task.run([ - 'connect:test', - 'mocha' - ]); - }); - - grunt.registerTask('build', [ - 'clean:dist', - 'wiredep', - 'useminPrepare', - 'concurrent:dist', - 'autoprefixer', - 'concat', - 'cssmin', - 'uglify', - 'copy:dist', - 'rev', - 'usemin', - 'htmlmin' - ]); - - grunt.registerTask('default', [ - 'newer:jshint', - 'test', - 'build' - ]); -}; From a42cd1204f72535aee12022db30b6574960d789e Mon Sep 17 00:00:00 2001 From: gaboesquivel Date: Mon, 8 Dec 2014 06:56:10 -0600 Subject: [PATCH 4/4] fix gulp config bug --- app/templates/gulp/config.js | 119 ++++++++--------------------------- 1 file changed, 26 insertions(+), 93 deletions(-) diff --git a/app/templates/gulp/config.js b/app/templates/gulp/config.js index 9ddf6eb..54c64ca 100644 --- a/app/templates/gulp/config.js +++ b/app/templates/gulp/config.js @@ -35,7 +35,7 @@ var configuration = { assets: { src: path.join(src, assets, '**/*'), imagesFilter: path.join(assets_images, '**/*'), - imagemin: {optimizationLevel: 5, progressive: true, interlaced: true}, + imagemin: { optimizationLevel: 5, progressive: true, interlaced: true }, dest: path.join(dest, assets) }, browserify: { @@ -86,120 +86,53 @@ var configuration = { ignorePath: path.join(dest), addRootSlash: false }, - < % if (isHtml()) -{ %> - minifyHtml < % -} -else -if (isJade()) { %> - jade < % -} -%>: -{ -} -, + <% if (isHtml()) { %>minifyHtml<% } else if (isJade()) { %>jade<% } %>: {}, dest: dest }, lint: { src: path.join(src, '**/*<%=scripts.extensions%>') -} -, +}, serve: { browserSync: { - server: { - baseDir: dest - } - , + server: {baseDir: dest}, open: false } -} -, +}, styles: { src: path.join(src, styles, styles_main), - basename -: - styles_output, - autoprefixer -: - { - browsers: ['last 2 versions'] - } -, -<% - if (isSass()) { %> - sass: { - sourcemap: utilities.env.isDev(), - style - : - 'compressed' - } - ,<% - } else if (isLess()) { %> - less: { - } - ,<% - } -%> + basename: styles_output, + autoprefixer: {browsers: ['last 2 versions']}, +<% if (isSass()) { %>sass: { + sourcemap: utilities.env.isDev(), + style: 'compressed' + },<% } else if (isLess()) { %>less: {},<% } %> dest: dest -} -, +}, templates: { src: path.join(src, scripts, scripts_app, '**/*<%=templates.extensions%>'), -<% - if (isHtml()) { %> - minifyHTML < % - } else if (isJade()) { %> - jade < % - } -%>: - { - } -, +<% if (isHtml()) { %>minifyHTML<% } else if (isJade()) { %>jade<% } %>: {}, templateCache: { filename: tmp_templates_output, - options - : - { + options: { moduleSystem: 'Browserify', - standalone - : - true, - module - : - tmp_templates_module, - base - : - function (file) { + standalone: true, + module: tmp_templates_module, + base: function (file) { return path.basename(file.relative); } } - } -, + }, dest: tmp -} -, +}, watch: { lint: path.join(src, scripts, scripts_app, '**/*<%=scripts.extensions%>'), - index -: - path.join(src, scripts, scripts_index), - config -: - path.join(src, scripts, scripts_config), - templates -: - path.join(src, scripts, scripts_app, '**/*<%=templates.extensions%>'), - styles -: - path.join(src, styles, '**/*<%=styles.extensions%>'), - styles_output -: - styles_output + '.min.css', - reload -: - path.join(dest, '**/*.{js,html}') -} + index: path.join(src, scripts, scripts_index), + config: path.join(src, scripts, scripts_config), + templates: path.join(src, scripts, scripts_app, '**/*<%=templates.extensions%>'), + styles: path.join(src, styles, '**/*<%=styles.extensions%>'), + styles_output: styles_output + '.min.css', + reload: path.join(dest, '**/*.{js,html}') } -; +}; module.exports = configuration;