This commit is contained in:
syuilo 2017-12-14 22:36:04 +09:00
parent 5166fc92b6
commit 5b66410031
3 changed files with 45 additions and 21 deletions

View file

@ -14,7 +14,8 @@ import config from './../../../../conf';
const parseParam = param => {
const id = param.type.match(/^id\((.+?)\)/);
const object = param.type.match(/^object\((.+?)\)/);
const entity = param.type.match(/^entity\((.+?)\)/);
const isObject = /^object/.test(param.type);
const isArray = /\[\]$/.test(param.type);
if (id) {
param.kind = 'id';
@ -24,18 +25,40 @@ const parseParam = param => {
param.type += '[]';
}
}
if (object) {
param.kind = 'object';
if (entity) {
param.kind = 'entity';
param.type = 'object';
param.def = object[1];
param.entity = entity[1];
if (isArray) {
param.type += '[]';
}
}
if (isObject) {
param.kind = 'object';
}
return param;
};
const extractDefs = params => {
const defs = [];
params.forEach(param => {
if (param.def) {
defs.push({
name: param.defName,
params: param.def.map(p => parseParam(p))
});
const childDefs = extractDefs(param.def);
defs.concat(childDefs);
}
});
return defs;
};
gulp.task('doc:endpoints', () => {
glob('./src/web/docs/api/endpoints/**/*.yaml', (globErr, files) => {
if (globErr) {
@ -50,11 +73,9 @@ gulp.task('doc:endpoints', () => {
url: `${config.api_url}/${ep.endpoint}`,
desc: ep.desc,
params: ep.params.map(p => parseParam(p)),
paramDefs: Object.keys(ep.paramDefs).map(key => ({
name: key,
params: ep.paramDefs[key].map(p => parseParam(p))
})),
res: ep.res.map(p => parseParam(p))
paramDefs: extractDefs(ep.params),
res: ep.res.map(p => parseParam(p)),
resDefs: extractDefs(ep.res)
};
pug.renderFile('./src/web/docs/api/endpoints/view.pug', vars, (renderErr, html) => {
if (renderErr) {

View file

@ -7,7 +7,7 @@ desc:
params:
- name: "text"
type: "string"
optional: false
optional: true
desc:
ja: "投稿の本文"
en: "Text of a post"
@ -30,14 +30,13 @@ params:
ja: "引用する投稿"
en: "A post you want to quote"
- name: "poll"
type: "object(poll)"
type: "object"
optional: true
desc:
ja: "投票"
en: "A poll"
paramDefs:
poll:
defName: "poll"
def:
- name: "choices"
type: "string[]"
optional: false

View file

@ -21,9 +21,13 @@ mixin table(params)
= ' '
a(href=`/docs/api/entities/${param.entity}`)= param.entity
| )
else if param.kind == 'entity'
| #{param.type} (
a(href=`/docs/api/entities/${param.entity}`)= param.entity
| )
else if param.kind == 'object'
| #{param.type} (
a(href=`#${param.def}`)= param.def
a(href=`#${param.defName}`)= param.defName
| )
else
= param.type