{% module %} <% var currentData; var swaggerTypes = ['byte', 'boolean', 'int', 'long', 'float', 'double', 'string', 'date', 'array']; function getModelChain(model, chain) { if (!model) { return []; } if (chain === undefined || chain === null) { chain = []; } chain.push(model); _.each(model.properties, function(prop) { if (prop.type.toLowerCase() == "array" && prop.items !== undefined && prop.items.$ref !== undefined) { candidate = currentData.models[prop.items.$ref] } else { candidate = currentData.models[prop.type]; } if (candidate !== undefined && !_.contains(chain, candidate)) { chain = getModelChain(candidate, chain); } }); return chain; } function getDtoChain(model, modelsAlreadyProcessed) { modelsAlreadyProcessed = modelsAlreadyProcessed || {}; modelsAlreadyProcessed[model.id] = true; var obj = {}; if (model === undefined || model === null) { return {}; } _.each(model.properties, function(prop, key) { if (prop.type.toLowerCase() == "array" && prop.items !== undefined && prop.items.$ref !== undefined) { candidate = currentData.models[prop.items.$ref] } else { candidate = currentData.models[prop.type]; } if (candidate !== undefined && !modelsAlreadyProcessed[candidate.id]) { obj[key] = getDtoChain(candidate, modelsAlreadyProcessed); } else { obj[key] = toSwaggerType(prop); } }); return obj; } function toSwaggerType(prop) { if (prop.type.toLowerCase() == "array") { var type = prop.items.type === undefined ? prop.items.$ref : prop.items.type; return "Array<" + type + ">"; } else { return prop.type; } } function getVerbClass(verb) { switch (verb.toLowerCase()) { case "get": return "info"; case "post": return "success"; case "delete": return "danger"; case "patch": case "put": return "warning"; default: return "default" } } // http://stackoverflow.com/a/7220510 function syntaxHighlight(json) { if (typeof json != 'string') { json = JSON.stringify(json, undefined, 2); } json = json.replace(/&/g, '&').replace(//g, '>'); return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) { var cls = 'number'; if (/^"/.test(match)) { if (/:$/.test(match)) { cls = 'key'; } else { cls = 'string'; } } else if (/true|false/.test(match)) { cls = 'boolean'; } else if (/null/.test(match)) { cls = 'null'; } return '' + match + ''; }); } function notUndefinedNullOrZeroLength(obj) { return obj !== undefined && obj !== null && obj.length > 0; } %> {% function name="apiAccordion" %}

${ a.resourcePath } ${ a.api.description }

% var accordionId = _.uniqueId('accordion');
<% currentData = a; a.apis.forEach(function(api) { api.operations.forEach(function (operation) { operation.path = api.path; operation.accordionId = accordionId; %> %{ apiAccordionPanel(operation) } % }); % });
{% end %} {% function name="apiAccordionPanel" %}
% if (a.notes !== undefined && a.notes !== null) {

Implementation Notes

${ a.notes }

% } % if (notUndefinedNullOrZeroLength(a.parameters)) {

Parameters

%{ parametersDescription(a) } % } % var requestClassType = _.findWhere(a.parameters, { paramType: 'body' }); % if (requestClassType !== undefined && requestClassType.dataType !== undefined) { % var requestClassModel = currentData.models[requestClassType.dataType];

Request Class

%{ classDescription({ nickname: a.nickname, models: getModelChain(requestClassModel) }) } % } % var responseClassModel = currentData.models[a.responseClass]; % if (responseClassModel !== undefined) {

Response Class

%{ classDescription({ nickname: a.nickname, models: getModelChain(responseClassModel) }) } % } % if (notUndefinedNullOrZeroLength(a.errorResponses)) {

Error Status Codes

% _.each(a.errorResponses, function(error) { % });
HTTP Status Reason
${ error.code } ${ error.reason }
% }
{% end %} {% function name="parametersDescription" %} % a.parameters.forEach(function(param) { % });
Parameter Parameter Type Data Type Description
${ param.name !== undefined && param.name !== null ? param.name : param.dataType } ${ param.paramType } ${ param.name === undefined || param.name === null ? '' : param.dataType } ${ param.description }
{% end %} {% function name="classDescription" %} % console.log(a); % var prefix = _.uniqueId(a.nickname);
% _.each(a.models, function(model) { %{ modelTable(model) } % });
% _.each(a.models, function(model) { ${ model.description || model.id }
%{ syntaxHighlight(model.properties) }
% });
% _.each(a.models, function(model) { ${ model.description || model.id }
%{ syntaxHighlight(getDtoChain(model)) }
% });
{% end %} {% function name="modelTable" %} ${ a.description || a.id } % _.each(a.properties, function(prop, key) { % });
Field Required Data Type Description
${ key } ${ prop.required } ${ toSwaggerType(prop) } ${ prop.description }
{% end %}