generator-swaggerize
Version:
Yeoman generator for openAPI(swagger) application
71 lines (65 loc) • 3.07 kB
JavaScript
var Util = require('./util');
var Path = require('path');
var operationType = Util.operationType;
module.exports = function routegen (generator, path, pathObj) {
var pathStr = path.replace(/^\/|\/$/g, '');
var mockgenPath = Path.join(generator.dataPath, 'mockgen.js');
var dataPath = Path.join(generator.dataPath, pathStr + '.js');
var route = {
basePath: (generator.api.basePath && generator.api.basePath !== '/') ? generator.api.basePath : '',
path: path,
apiPathRel: Util.relative(generator.genFilePath, generator.apiConfigPath),
mockgenPath: Util.relative(generator.genFilePath, generator.destinationPath(mockgenPath)),
dataPath: Util.relative(generator.genFilePath, generator.destinationPath(dataPath)),
handlerDir: Util.relative(generator.genFilePath, generator.destinationPath(generator.handlerPath)),
operations: [],
security: generator.security,
securityPath: Util.relative(generator.genFilePath, generator.destinationPath(generator.securityPath))
};
Object.keys(pathObj).forEach(function (method) {
var commonParams = [];
var operationObj = pathObj[method];
method = method.toLowerCase();
if (method === 'parameters') {
/*
* A list of parameters that are applicable for all the operations described under this path.
* These parameters can be overridden at the operation level, but cannot be removed there.
* The list MUST NOT include duplicated parameters
*/
commonParams = operationObj;
} else if (operationType.indexOf(method) !== -1) {
/*
* The operation for the Path. get, post. put etc.
*/
var parameters = commonParams;
var validateResp = false;
var response;
var responses = operationObj.responses;
var respArr = responses ? Object.keys(responses): [];
if (respArr.length > 0 ) {
//Sort the array to maintain the order of keys.
//Use the first response as the default response
response = respArr.sort()[0];
if(responses[response] && responses[response].schema) {
validateResp = true;
}
}
if (operationObj.parameters) {
parameters = commonParams.concat(operationObj.parameters);
}
route.operations.push({
name: operationObj.operationId,
description: operationObj.description,
summary: operationObj.summary,
method: method,
parameters: parameters && parameters.map(function (p) { return p.name; }).join(', '),
produces: operationObj.produces && operationObj.produces.join(', '),
responses: respArr,
response: response,
validateResp: validateResp
});
}
});
return route;
};
;