Skip to content

Commit ef2719b

Browse files
committed
feat: Annotated categories, roles, state-machines, etc with name of blueprint they came from
1 parent d1ea82e commit ef2719b

7 files changed

Lines changed: 45 additions & 32 deletions

File tree

lib/actions/add-role/index.js

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const c = require('ansi-colors')
22
const Blueprint = require('../blueprint')
33
const nameLabelDescription = require('../util/name-label-and-description')
4-
const ask = require('../util/ask')
4+
const chooseRoles = require('../util/choose-roles')
55

66
async function addRole (options) {
77
const blueprint = Blueprint.load(options)
@@ -30,18 +30,15 @@ async function selectRoles (blueprint) {
3030
return
3131
}
3232

33-
const selectedRoles = await ask({
34-
type: 'autocomplete',
35-
multiple: true,
36-
message: 'Roles this new role is a member of',
37-
hint: '(Use <space> to select, <return> to submit)',
38-
sort: true,
39-
choices: roles.map(m => m.label)
40-
})
33+
const selectedRoles = await chooseRoles(
34+
blueprint,
35+
{
36+
message: 'Roles this new role is a member of',
37+
includeBuiltIn: false
38+
}
39+
)
4140

42-
return roles
43-
.filter(r => selectedRoles.includes(r.label))
44-
.map(r => r.name)
41+
return selectedRoles
4542
} // selectRoles
4643

4744
module.exports = addRole

lib/actions/add-search-doc/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ async function addSearchDoc (options) {
1717

1818
const category = await chooseCategory(blueprint, model.name)
1919

20-
const roles = await chooseRoles(blueprint, '$everyone')
20+
const roles = await chooseRoles(blueprint, { suggested: '$everyone' })
2121

2222
const launches = await chooseLaunches(blueprint)
2323

lib/actions/add-state-machine/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ async function selectForm (blueprint) {
6565
const forms = blueprint.forms()
6666

6767
if (forms.length === 0) {
68-
console.log(c.bold.red('Blueprint has no models to scaffold a form against'))
68+
console.log(c.bold.red('Blueprint has no forms against'))
6969
return
7070
}
7171

lib/actions/blueprint.js

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,28 +41,24 @@ class Blueprint {
4141
}
4242
})
4343

44-
this.uses.forEach(b => {
45-
const extras = b.models()
46-
extras.forEach(e => { if(!e.parent) e.parent = b.name })
47-
models.push(...extras)
48-
})
49-
50-
return models
51-
}
44+
return grabExtras(models, this.uses, 'models')
45+
} // models
5246

5347
forms () {
5448
const names = listJsonFiles(this.path, 'card-templates')
55-
return names.map(n => {
49+
const forms = names.map(n => {
5650
return {
5751
name: n,
5852
meta: formMeta(this.path, 'card-templates', `${n}.json`)
5953
}
6054
})
55+
56+
return grabExtras(forms, this.uses, 'forms')
6157
} // forms
6258

6359
stateMachines () {
6460
const names = listJsonFiles(this.path, 'state-machines')
65-
return names.map(name => {
61+
const machines = names.map(name => {
6662
const details = readJson(this.path, 'state-machines', `${name}.json`)
6763

6864
const parts = [
@@ -76,6 +72,8 @@ class Blueprint {
7672
.map(p => p.replace('.', '_'))
7773
.join('_')
7874
})
75+
76+
return grabExtras(machines, this.uses, 'stateMachines')
7977
} // stateMachines
8078

8179
categories () {
@@ -87,10 +85,10 @@ class Blueprint {
8785
...details
8886
}
8987
})
90-
return cats
88+
return grabExtras(cats, this.uses, 'categories')
9189
}
9290

93-
roles (includeBuiltin = true) {
91+
roles (includeBuiltin = false) {
9492
const names = listJsonFiles(this.path, 'template-roles')
9593
const roles = names.map(n => {
9694
const details = readJson(this.path, 'template-roles', `${n}.json`)
@@ -99,6 +97,7 @@ class Blueprint {
9997
...details
10098
}
10199
})
100+
grabExtras(roles, this.uses, 'roles')
102101
if (includeBuiltin) {
103102
roles.unshift({
104103
name: '$everyone',
@@ -127,6 +126,16 @@ class Blueprint {
127126
get scaffold () { return this.scaffold_ }
128127
}
129128

129+
function grabExtras (target, uses, fn) {
130+
uses.forEach(b => {
131+
const extras = b[fn]()
132+
extras.forEach(e => { if (!e.parent) e.parent = b.name })
133+
target.push(...extras)
134+
})
135+
return target
136+
}
137+
138+
130139
function listJsonFiles (basepath, directory) {
131140
if (!isDir(basepath, directory)) return []
132141

lib/actions/util/choose-categories.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ async function chooseCategories (blueprint) {
2626
return {
2727
name: c.name,
2828
message: c.label,
29-
hint: c.description,
29+
hint: `${c.description} ${c.parent ? '(' + c.parent + ')' : ''}`,
3030
value: c.name
3131
}
3232
})

lib/actions/util/choose-category.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ async function chooseCategory (blueprint, suggestion) {
2424
return {
2525
name: c.name,
2626
message: c.label,
27-
hint: c.description,
27+
hint: `${c.description} ${c.parent ? '(' + c.parent + ')' : ''}`,
2828
value: c.name
2929
}
3030
})

lib/actions/util/choose-roles.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
const c = require('ansi-colors')
22
const ask = require('./ask')
33

4-
async function chooseRoles (blueprint, suggested = '$authenticated') {
5-
const roles = blueprint.roles()
4+
async function chooseRoles (
5+
blueprint,
6+
options = {
7+
includeBuiltIn: true
8+
}) {
9+
10+
const suggested = options.suggested || '$authenticated'
11+
const roles = blueprint.roles(options.includeBuiltIn)
612

713
if (roles.length === 0) {
814
console.log(c.bold.red('Blueprint has no roles defined'))
@@ -17,12 +23,13 @@ async function chooseRoles (blueprint, suggested = '$authenticated') {
1723
const cats = await ask({
1824
type: 'autocomplete',
1925
multiple: true,
20-
message: 'Select roles',
26+
message: options.message || 'Select roles',
27+
sort: true,
2128
choices: roles.map(r => {
2229
return {
2330
name: r.name,
2431
message: r.label,
25-
hint: r.description,
32+
hint: `${r.description} ${r.parent ? '(' + r.parent + ')' : ''}`,
2633
value: r.name
2734
}
2835
})

0 commit comments

Comments
 (0)