From 2056b1325f4b56fc18b387a7ce0006da32706fdf Mon Sep 17 00:00:00 2001 From: Mike Brocchi Date: Thu, 7 Apr 2016 00:49:22 -0400 Subject: [PATCH] chore: generation paths are fully dynamic & supports --flat for components/directives/pipes/services This is a step in aligning with the style guide and will provide the flexibility needed Related to #316 --- .../__name__ => __path__}/__name__.css | 0 .../__name__ => __path__}/__name__.html | 0 .../__name__ => __path__}/__name__.spec.ts | 1 - .../__name__ => __path__}/__name__.ts | 0 addon/ng2/blueprints/component/index.js | 21 +++++++++++------ .../__name__ => __path__}/__name__.spec.ts | 0 .../__name__ => __path__}/__name__.ts | 0 addon/ng2/blueprints/directive/index.js | 21 +++++++++++------ .../__name__ => __path__}/__name__.spec.ts | 0 .../__name__ => __path__}/__name__.ts | 0 addon/ng2/blueprints/pipe/index.js | 23 +++++++++++++------ .../client/app => __path__}/route-config.ts | 0 addon/ng2/blueprints/route-config/index.js | 21 +++++++++++++++-- .../__name__ => __path__}/__name__.spec.ts | 0 .../__name__ => __path__}/__name__.ts | 0 addon/ng2/blueprints/service/index.js | 23 +++++++++++++------ addon/ng2/utilities/dynamic-path-parser.js | 8 ++++--- tests/acceptance/dynamic-path-parser.spec.js | 16 +++++++------ 18 files changed, 93 insertions(+), 41 deletions(-) rename addon/ng2/blueprints/component/files/{src/client/app/__path__/__name__ => __path__}/__name__.css (100%) rename addon/ng2/blueprints/component/files/{src/client/app/__path__/__name__ => __path__}/__name__.html (100%) rename addon/ng2/blueprints/component/files/{src/client/app/__path__/__name__ => __path__}/__name__.spec.ts (99%) rename addon/ng2/blueprints/component/files/{src/client/app/__path__/__name__ => __path__}/__name__.ts (100%) rename addon/ng2/blueprints/directive/files/{src/client/app/__path__/__name__ => __path__}/__name__.spec.ts (100%) rename addon/ng2/blueprints/directive/files/{src/client/app/__path__/__name__ => __path__}/__name__.ts (100%) rename addon/ng2/blueprints/pipe/files/{src/client/app/__path__/__name__ => __path__}/__name__.spec.ts (100%) rename addon/ng2/blueprints/pipe/files/{src/client/app/__path__/__name__ => __path__}/__name__.ts (100%) rename addon/ng2/blueprints/route-config/files/{src/client/app => __path__}/route-config.ts (100%) rename addon/ng2/blueprints/service/files/{src/client/app/__path__/__name__ => __path__}/__name__.spec.ts (100%) rename addon/ng2/blueprints/service/files/{src/client/app/__path__/__name__ => __path__}/__name__.ts (100%) diff --git a/addon/ng2/blueprints/component/files/src/client/app/__path__/__name__/__name__.css b/addon/ng2/blueprints/component/files/__path__/__name__.css similarity index 100% rename from addon/ng2/blueprints/component/files/src/client/app/__path__/__name__/__name__.css rename to addon/ng2/blueprints/component/files/__path__/__name__.css diff --git a/addon/ng2/blueprints/component/files/src/client/app/__path__/__name__/__name__.html b/addon/ng2/blueprints/component/files/__path__/__name__.html similarity index 100% rename from addon/ng2/blueprints/component/files/src/client/app/__path__/__name__/__name__.html rename to addon/ng2/blueprints/component/files/__path__/__name__.html diff --git a/addon/ng2/blueprints/component/files/src/client/app/__path__/__name__/__name__.spec.ts b/addon/ng2/blueprints/component/files/__path__/__name__.spec.ts similarity index 99% rename from addon/ng2/blueprints/component/files/src/client/app/__path__/__name__/__name__.spec.ts rename to addon/ng2/blueprints/component/files/__path__/__name__.spec.ts index 3352d5d81e4e..82961b117413 100644 --- a/addon/ng2/blueprints/component/files/src/client/app/__path__/__name__/__name__.spec.ts +++ b/addon/ng2/blueprints/component/files/__path__/__name__.spec.ts @@ -12,7 +12,6 @@ import { import {provide} from 'angular2/core'; import {<%= classifiedModuleName %>} from './<%= dasherizedModuleName %>'; - describe('<%= classifiedModuleName %> Component', () => { beforeEachProviders((): any[] => []); diff --git a/addon/ng2/blueprints/component/files/src/client/app/__path__/__name__/__name__.ts b/addon/ng2/blueprints/component/files/__path__/__name__.ts similarity index 100% rename from addon/ng2/blueprints/component/files/src/client/app/__path__/__name__/__name__.ts rename to addon/ng2/blueprints/component/files/__path__/__name__.ts diff --git a/addon/ng2/blueprints/component/index.js b/addon/ng2/blueprints/component/index.js index d8f38de52005..9ea61aa44207 100644 --- a/addon/ng2/blueprints/component/index.js +++ b/addon/ng2/blueprints/component/index.js @@ -1,7 +1,12 @@ +var path = require('path'); var dynamicPathParser = require('../../utilities/dynamic-path-parser'); module.exports = { description: '', + + availableOptions: [ + { name: 'flat', type: Boolean, default: false, aliases: ['f'] } + ], normalizeEntityName: function (entityName) { var parsedPath = dynamicPathParser(this.project, entityName); @@ -10,20 +15,22 @@ module.exports = { return parsedPath.name; }, - locals: function () { + locals: function (options) { return { - dynamicPath: this.dynamicPath.dir + dynamicPath: this.dynamicPath.dir.replace(this.dynamicPath.appRoot, ''), + flat: options.flat }; }, - fileMapTokens: function () { + fileMapTokens: function (options) { // Return custom template variables here. return { - __name__: () => { - return this.dynamicPath.name; - }, __path__: () => { - return this.dynamicPath.dir; + var dir = this.dynamicPath.dir; + if (!options.locals.flat) { + dir += path.sep + options.dasherizedModuleName; + } + return dir; } }; } diff --git a/addon/ng2/blueprints/directive/files/src/client/app/__path__/__name__/__name__.spec.ts b/addon/ng2/blueprints/directive/files/__path__/__name__.spec.ts similarity index 100% rename from addon/ng2/blueprints/directive/files/src/client/app/__path__/__name__/__name__.spec.ts rename to addon/ng2/blueprints/directive/files/__path__/__name__.spec.ts diff --git a/addon/ng2/blueprints/directive/files/src/client/app/__path__/__name__/__name__.ts b/addon/ng2/blueprints/directive/files/__path__/__name__.ts similarity index 100% rename from addon/ng2/blueprints/directive/files/src/client/app/__path__/__name__/__name__.ts rename to addon/ng2/blueprints/directive/files/__path__/__name__.ts diff --git a/addon/ng2/blueprints/directive/index.js b/addon/ng2/blueprints/directive/index.js index d8f38de52005..2232263768eb 100644 --- a/addon/ng2/blueprints/directive/index.js +++ b/addon/ng2/blueprints/directive/index.js @@ -1,7 +1,12 @@ +var path = require('path'); var dynamicPathParser = require('../../utilities/dynamic-path-parser'); module.exports = { description: '', + + availableOptions: [ + { name: 'flat', type: Boolean, default: false, aliases: ['f'] } + ], normalizeEntityName: function (entityName) { var parsedPath = dynamicPathParser(this.project, entityName); @@ -10,20 +15,22 @@ module.exports = { return parsedPath.name; }, - locals: function () { + locals: function (options) { return { - dynamicPath: this.dynamicPath.dir + dynamicPath: this.dynamicPath.dir, + flat: options.flat }; }, - fileMapTokens: function () { + fileMapTokens: function (options) { // Return custom template variables here. return { - __name__: () => { - return this.dynamicPath.name; - }, __path__: () => { - return this.dynamicPath.dir; + var dir = this.dynamicPath.dir; + if (!options.locals.flat) { + dir += path.sep + options.dasherizedModuleName; + } + return dir; } }; } diff --git a/addon/ng2/blueprints/pipe/files/src/client/app/__path__/__name__/__name__.spec.ts b/addon/ng2/blueprints/pipe/files/__path__/__name__.spec.ts similarity index 100% rename from addon/ng2/blueprints/pipe/files/src/client/app/__path__/__name__/__name__.spec.ts rename to addon/ng2/blueprints/pipe/files/__path__/__name__.spec.ts diff --git a/addon/ng2/blueprints/pipe/files/src/client/app/__path__/__name__/__name__.ts b/addon/ng2/blueprints/pipe/files/__path__/__name__.ts similarity index 100% rename from addon/ng2/blueprints/pipe/files/src/client/app/__path__/__name__/__name__.ts rename to addon/ng2/blueprints/pipe/files/__path__/__name__.ts diff --git a/addon/ng2/blueprints/pipe/index.js b/addon/ng2/blueprints/pipe/index.js index 5b520c0a0278..a8bb926516c2 100644 --- a/addon/ng2/blueprints/pipe/index.js +++ b/addon/ng2/blueprints/pipe/index.js @@ -1,7 +1,12 @@ +var path = require('path'); var dynamicPathParser = require('../../utilities/dynamic-path-parser'); module.exports = { description: '', + + availableOptions: [ + { name: 'flat', type: Boolean, default: false, aliases: ['f'] } + ], normalizeEntityName: function (entityName) { var parsedPath = dynamicPathParser(this.project, entityName); @@ -10,18 +15,22 @@ module.exports = { return parsedPath.name; }, - locals: function () { - return { dynamicPath: this.dynamicPath.dir }; + locals: function (options) { + return { + dynamicPath: this.dynamicPath.dir, + flat: options.flat + }; }, - fileMapTokens: function () { + fileMapTokens: function (options) { // Return custom template variables here. return { - __name__: () => { - return this.dynamicPath.name; - }, __path__: () => { - return this.dynamicPath.dir; + var dir = this.dynamicPath.dir; + if (!options.locals.flat) { + dir += path.sep + options.dasherizedModuleName; + } + return dir; } }; } diff --git a/addon/ng2/blueprints/route-config/files/src/client/app/route-config.ts b/addon/ng2/blueprints/route-config/files/__path__/route-config.ts similarity index 100% rename from addon/ng2/blueprints/route-config/files/src/client/app/route-config.ts rename to addon/ng2/blueprints/route-config/files/__path__/route-config.ts diff --git a/addon/ng2/blueprints/route-config/index.js b/addon/ng2/blueprints/route-config/index.js index 3599cc39e4bf..5921aa199a57 100644 --- a/addon/ng2/blueprints/route-config/index.js +++ b/addon/ng2/blueprints/route-config/index.js @@ -1,13 +1,17 @@ var fs = require('fs-extra'); var path = require('path'); +var dynamicPathParser = require('../../utilities/dynamic-path-parser'); var imports, routeDefinitions; module.exports = { description: 'Registers the route with the router.', - locals: function (options) { - return generateLocals.call(this, options); + normalizeEntityName: function () { + var parsedPath = dynamicPathParser(this.project, 'ignore'); + + this.dynamicPath = parsedPath; + return parsedPath.name; }, beforeInstall: function (options) { @@ -17,6 +21,19 @@ module.exports = { } catch (e) { // doing nothing here } + }, + + locals: function (options) { + return generateLocals.call(this, options); + }, + + fileMapTokens: function () { + // Return custom template variables here. + return { + __path__: () => { + return this.dynamicPath.dir; + } + }; } }; diff --git a/addon/ng2/blueprints/service/files/src/client/app/__path__/__name__/__name__.spec.ts b/addon/ng2/blueprints/service/files/__path__/__name__.spec.ts similarity index 100% rename from addon/ng2/blueprints/service/files/src/client/app/__path__/__name__/__name__.spec.ts rename to addon/ng2/blueprints/service/files/__path__/__name__.spec.ts diff --git a/addon/ng2/blueprints/service/files/src/client/app/__path__/__name__/__name__.ts b/addon/ng2/blueprints/service/files/__path__/__name__.ts similarity index 100% rename from addon/ng2/blueprints/service/files/src/client/app/__path__/__name__/__name__.ts rename to addon/ng2/blueprints/service/files/__path__/__name__.ts diff --git a/addon/ng2/blueprints/service/index.js b/addon/ng2/blueprints/service/index.js index 5b520c0a0278..2232263768eb 100644 --- a/addon/ng2/blueprints/service/index.js +++ b/addon/ng2/blueprints/service/index.js @@ -1,7 +1,12 @@ +var path = require('path'); var dynamicPathParser = require('../../utilities/dynamic-path-parser'); module.exports = { description: '', + + availableOptions: [ + { name: 'flat', type: Boolean, default: false, aliases: ['f'] } + ], normalizeEntityName: function (entityName) { var parsedPath = dynamicPathParser(this.project, entityName); @@ -10,18 +15,22 @@ module.exports = { return parsedPath.name; }, - locals: function () { - return { dynamicPath: this.dynamicPath.dir }; + locals: function (options) { + return { + dynamicPath: this.dynamicPath.dir, + flat: options.flat + }; }, - fileMapTokens: function () { + fileMapTokens: function (options) { // Return custom template variables here. return { - __name__: () => { - return this.dynamicPath.name; - }, __path__: () => { - return this.dynamicPath.dir; + var dir = this.dynamicPath.dir; + if (!options.locals.flat) { + dir += path.sep + options.dasherizedModuleName; + } + return dir; } }; } diff --git a/addon/ng2/utilities/dynamic-path-parser.js b/addon/ng2/utilities/dynamic-path-parser.js index 80a433627b73..284f9d011978 100644 --- a/addon/ng2/utilities/dynamic-path-parser.js +++ b/addon/ng2/utilities/dynamic-path-parser.js @@ -3,9 +3,10 @@ var process = require('process'); module.exports = function dynamicPathParser(project, entityName) { var projectRoot = project.root; + var appRoot = path.join('src', 'client', 'app'); var cwd = process.env.PWD; - var rootPath = path.join(projectRoot, 'src', 'client', 'app'); + var rootPath = path.join(projectRoot, appRoot); var outputPath = path.join(rootPath, entityName); @@ -31,14 +32,15 @@ module.exports = function dynamicPathParser(project, entityName) { if (outputPath.indexOf(rootPath) < 0) { throw `Invalid path: "${entityName}" cannot be ` + - `above the "${path.join('src', 'app')}" directory`; + `above the "${appRoot}" directory`; } - var adjustedPath = outputPath.replace(rootPath, ''); + var adjustedPath = outputPath.replace(projectRoot, ''); var parsedPath = path.parse(adjustedPath); parsedPath.dir = parsedPath.dir === path.sep ? '' : parsedPath.dir; + parsedPath.appRoot = appRoot return parsedPath; }; \ No newline at end of file diff --git a/tests/acceptance/dynamic-path-parser.spec.js b/tests/acceptance/dynamic-path-parser.spec.js index fbbbf2586286..a8b88754b49a 100644 --- a/tests/acceptance/dynamic-path-parser.spec.js +++ b/tests/acceptance/dynamic-path-parser.spec.js @@ -4,6 +4,8 @@ var expect = require('chai').expect; var path = require('path'); var dynamicPathParser = require('../../addon/ng2/utilities/dynamic-path-parser'); +var appDir = `${path.sep}src${path.sep}client${path.sep}app`; + describe('dynamic path parser', () => { var project; var entityName = 'temp-name'; @@ -14,42 +16,42 @@ describe('dynamic path parser', () => { it('parse from proj root dir', () => { process.env.PWD = process.cwd(); var result = dynamicPathParser(project, entityName); - expect(result.dir).to.equal(''); + expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); it('parse from proj src dir', () => { process.env.PWD = path.join(process.cwd(), 'src'); var result = dynamicPathParser(project, entityName); - expect(result.dir).to.equal(''); + expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); it(`parse from proj src${path.sep}client dir`, () => { process.env.PWD = path.join(process.cwd(), 'src', 'client'); var result = dynamicPathParser(project, entityName); - expect(result.dir).to.equal(''); + expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); it(`parse from proj src${path.sep}client${path.sep}app dir`, () => { process.env.PWD = path.join(process.cwd(), 'src', 'client', 'app'); var result = dynamicPathParser(project, entityName); - expect(result.dir).to.equal(''); + expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); it(`parse from proj src${path.sep}client${path.sep}app${path.sep}child-dir`, () => { process.env.PWD = path.join(process.cwd(), 'src', 'client', 'app', 'child-dir'); var result = dynamicPathParser(project, entityName); - expect(result.dir).to.equal(`${path.sep}child-dir`); + expect(result.dir).to.equal(`${appDir}${path.sep}child-dir`); expect(result.name).to.equal(entityName); }); it(`parse from proj src${path.sep}client${path.sep}app${path.sep}child-dir w/ ..${path.sep}`, () => { process.env.PWD = path.join(process.cwd(), 'src', 'client', 'app', 'child-dir'); var result = dynamicPathParser(project, '..' + path.sep + entityName); - expect(result.dir).to.equal(''); + expect(result.dir).to.equal(appDir); expect(result.name).to.equal(entityName); }); @@ -57,7 +59,7 @@ describe('dynamic path parser', () => { () => { process.env.PWD = path.join(process.cwd(), 'src', 'client', 'app', 'child-dir', 'grand-child-dir'); var result = dynamicPathParser(project, '..' + path.sep + entityName); - expect(result.dir).to.equal(`${path.sep}child-dir`); + expect(result.dir).to.equal(`${appDir}${path.sep}child-dir`); expect(result.name).to.equal(entityName); }); });