From 5fac5b52265ee2d8b6963cc8fb9647fe03bcb053 Mon Sep 17 00:00:00 2001 From: Brandon Roberts Date: Mon, 5 Feb 2018 20:04:52 -0600 Subject: [PATCH] feat(Schematics): Add group option to entity blueprint Closes #779 --- ...name@dasherize@group-actions__.actions.ts} | 2 +- ... __name@dasherize@group-models__.model.ts} | 0 ...ame@dasherize@group-reducers__.reducer.ts} | 4 +- ...ze@group-reducers__.reducer__dot__spec.ts} | 2 +- modules/schematics/src/entity/index.spec.ts | 39 +++++++++++++++++++ modules/schematics/src/entity/index.ts | 6 +++ modules/schematics/src/entity/schema.d.ts | 1 + modules/schematics/src/entity/schema.json | 6 +++ 8 files changed, 56 insertions(+), 4 deletions(-) rename modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/{__name@dasherize__.actions.ts => __name@dasherize@group-actions__.actions.ts} (95%) rename modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/{__name@dasherize__.model.ts => __name@dasherize@group-models__.model.ts} (100%) rename modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/{__name@dasherize__.reducer.ts => __name@dasherize@group-reducers__.reducer.ts} (89%) rename modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/{__name@dasherize__.reducer__dot__spec.ts => __name@dasherize@group-reducers__.reducer__dot__spec.ts} (68%) diff --git a/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.actions.ts b/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize@group-actions__.actions.ts similarity index 95% rename from modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.actions.ts rename to modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize@group-actions__.actions.ts index 92235a854f..ca044352de 100644 --- a/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.actions.ts +++ b/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize@group-actions__.actions.ts @@ -1,6 +1,6 @@ import { Action } from '@ngrx/store'; import { Update } from '@ngrx/entity'; -import { <%= classify(name) %> } from './<%= dasherize(name) %>.model'; +import { <%= classify(name) %> } from '<%= featurePath(group, flat, "models", dasherize(name)) %><%= dasherize(name) %>.model'; export enum <%= classify(name) %>ActionTypes { Load<%= classify(name) %>s = '[<%= classify(name) %>] Load <%= classify(name) %>s', diff --git a/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.model.ts b/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize@group-models__.model.ts similarity index 100% rename from modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.model.ts rename to modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize@group-models__.model.ts diff --git a/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.reducer.ts b/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize@group-reducers__.reducer.ts similarity index 89% rename from modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.reducer.ts rename to modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize@group-reducers__.reducer.ts index d386665321..042790af6a 100644 --- a/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.reducer.ts +++ b/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize@group-reducers__.reducer.ts @@ -1,6 +1,6 @@ import { EntityState, EntityAdapter, createEntityAdapter } from '@ngrx/entity'; -import { <%= classify(name) %> } from './<%= dasherize(name) %>.model'; -import { <%= classify(name) %>Actions, <%= classify(name) %>ActionTypes } from './<%= dasherize(name) %>.actions'; +import { <%= classify(name) %> } from '<%= featurePath(group, flat, "models", dasherize(name)) %><%= dasherize(name) %>.model'; +import { <%= classify(name) %>Actions, <%= classify(name) %>ActionTypes } from '<%= featurePath(group, flat, "actions", dasherize(name)) %><%= dasherize(name) %>.actions'; export interface State extends EntityState<<%= classify(name) %>> { // additional entities state properties diff --git a/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.reducer__dot__spec.ts b/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize@group-reducers__.reducer__dot__spec.ts similarity index 68% rename from modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.reducer__dot__spec.ts rename to modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize@group-reducers__.reducer__dot__spec.ts index 1e49ab0fab..e61caab1a3 100644 --- a/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.reducer__dot__spec.ts +++ b/modules/schematics/src/entity/files/__path__/__name@dasherize@if-flat__/__name@dasherize@group-reducers__.reducer__dot__spec.ts @@ -1,4 +1,4 @@ -import { reducer, initialState } from './<%= dasherize(name) %>.reducer'; +import { reducer, initialState } from '<%= featurePath(group, flat, "reducers", dasherize(name)) %><%= dasherize(name) %>.reducer'; describe('<%= classify(name) %> Reducer', () => { describe('unknown action', () => { diff --git a/modules/schematics/src/entity/index.spec.ts b/modules/schematics/src/entity/index.spec.ts index b3a08e07db..a91d6a8e2b 100644 --- a/modules/schematics/src/entity/index.spec.ts +++ b/modules/schematics/src/entity/index.spec.ts @@ -60,6 +60,45 @@ describe('Entity Schematic', () => { const tree = schematicRunner.runSchematic('entity', options, appTree); const content = getFileContent(tree, '/src/app/app.module.ts'); + expect(content).toMatch(/import \* as fromFoo from '\.\/foo.reducer';/); }); + + it('should create all files of an entity within grouped and nested folders', () => { + const options = { ...defaultOptions, flat: false, group: true, spec: true }; + + const tree = schematicRunner.runSchematic('entity', options); + const files = tree.files; + expect( + files.indexOf('/src/app/foo/actions/foo.actions.ts') + ).toBeGreaterThanOrEqual(0); + expect( + files.indexOf('/src/app/foo/models/foo.model.ts') + ).toBeGreaterThanOrEqual(0); + expect( + files.indexOf('/src/app/foo/reducers/foo.reducer.ts') + ).toBeGreaterThanOrEqual(0); + expect( + files.indexOf('/src/app/foo/reducers/foo.reducer.spec.ts') + ).toBeGreaterThanOrEqual(0); + }); + + it('should create all files of an entity within grouped folders if group is set', () => { + const options = { ...defaultOptions, group: true, spec: true }; + + const tree = schematicRunner.runSchematic('entity', options); + const files = tree.files; + expect( + files.indexOf('/src/app/actions/foo.actions.ts') + ).toBeGreaterThanOrEqual(0); + expect( + files.indexOf('/src/app/models/foo.model.ts') + ).toBeGreaterThanOrEqual(0); + expect( + files.indexOf('/src/app/reducers/foo.reducer.ts') + ).toBeGreaterThanOrEqual(0); + expect( + files.indexOf('/src/app/reducers/foo.reducer.spec.ts') + ).toBeGreaterThanOrEqual(0); + }); }); diff --git a/modules/schematics/src/entity/index.ts b/modules/schematics/src/entity/index.ts index b1017526e3..143db6edb5 100644 --- a/modules/schematics/src/entity/index.ts +++ b/modules/schematics/src/entity/index.ts @@ -39,6 +39,12 @@ export default function(options: EntityOptions): Rule { template({ ...stringUtils, 'if-flat': (s: string) => (options.flat ? '' : s), + 'group-actions': (name: string) => + stringUtils.group(name, options.group ? 'actions' : ''), + 'group-models': (name: string) => + stringUtils.group(name, options.group ? 'models' : ''), + 'group-reducers': (s: string) => + stringUtils.group(s, options.group ? 'reducers' : ''), ...(options as object), dot: () => '.', }), diff --git a/modules/schematics/src/entity/schema.d.ts b/modules/schematics/src/entity/schema.d.ts index 885d751e52..c11b5ee0e2 100644 --- a/modules/schematics/src/entity/schema.d.ts +++ b/modules/schematics/src/entity/schema.d.ts @@ -10,4 +10,5 @@ export interface Schema { module?: string; reducers?: string; flat?: boolean; + group?: boolean; } diff --git a/modules/schematics/src/entity/schema.json b/modules/schematics/src/entity/schema.json index d838706994..706aeada82 100644 --- a/modules/schematics/src/entity/schema.json +++ b/modules/schematics/src/entity/schema.json @@ -37,6 +37,12 @@ "type": "boolean", "default": true, "description": "Flag to indicate if a dir is created." + }, + "group": { + "type": "boolean", + "default": false, + "description": "Group actions, reducers and effects within relative subfolders", + "aliases": ["g"] } }, "required": [