Skip to content
This repository was archived by the owner on Sep 6, 2021. It is now read-only.

Implement apiBody and apiQuery tags #104

Merged
merged 5 commits into from
Oct 29, 2020
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ var app = {
},
parsers: {
api : './parsers/api.js',
apibody : './parsers/api_body.js',
apiquery : './parsers/api_query.js',
apidefine : './parsers/api_define.js',
apidescription : './parsers/api_description.js',
apierror : './parsers/api_error.js',
Expand Down
16 changes: 16 additions & 0 deletions lib/parsers/api_body.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Same as @apiParam
var apiParser = require('./api_param.js');

function parse(content, source) {
return apiParser.parse(content, source, 'Body');
}

/**
* Exports
*/
module.exports = {
parse : parse,
path : 'local.body',
method : apiParser.method,
markdownFields: [ 'description' ]
};
16 changes: 16 additions & 0 deletions lib/parsers/api_query.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Same as @apiParam
var apiParser = require('./api_param.js');

function parse(content, source) {
return apiParser.parse(content, source, 'Query');
}

/**
* Exports
*/
module.exports = {
parse : parse,
path : 'local.query',
method : apiParser.method,
markdownFields: [ 'description' ]
};
42 changes: 42 additions & 0 deletions lib/workers/api_body_title.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
var apiWorker = require('./api_param_title.js');

// Additional information for error log
var _messages = {
common: {
element: 'apiBody',
usage : '@apiBody (group) varname',
example: '@apiDefine MyValidParamGroup Some title\n@apiBody (MyValidParamGroup) username'
}
};

/**
* PreProcess
*
* @param {Object[]} parsedFiles
* @param {String[]} filenames
* @param {Object} packageInfos
* @returns {Object}
*/
function preProcess(parsedFiles, filenames, packageInfos) {
return apiWorker.preProcess(parsedFiles, filenames, packageInfos, 'defineBodyTitle');
}

/**
* PostProcess
*
* @param {Object[]} parsedFiles
* @param {String[]} filenames
* @param {Object[]} preProcess
* @param {Object} packageInfos
*/
function postProcess(parsedFiles, filenames, preProcess, packageInfos) {
apiWorker.postProcess(parsedFiles, filenames, preProcess, packageInfos, 'defineBodyTitle', 'body', _messages);
}

/**
* Exports
*/
module.exports = {
preProcess : preProcess,
postProcess: postProcess
};
42 changes: 42 additions & 0 deletions lib/workers/api_query_title.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
var apiWorker = require('./api_param_title.js');

// Additional information for error log
var _messages = {
common: {
element: 'apiQuery',
usage : '@apiQuery (group) varname',
example: '@apiDefine MyValidParamGroup Some title\n@apiQuery (MyValidParamGroup) username'
}
};

/**
* PreProcess
*
* @param {Object[]} parsedFiles
* @param {String[]} filenames
* @param {Object} packageInfos
* @returns {Object}
*/
function preProcess(parsedFiles, filenames, packageInfos) {
return apiWorker.preProcess(parsedFiles, filenames, packageInfos, 'defineQueryTitle');
}

/**
* PostProcess
*
* @param {Object[]} parsedFiles
* @param {String[]} filenames
* @param {Object[]} preProcess
* @param {Object} packageInfos
*/
function postProcess(parsedFiles, filenames, preProcess, packageInfos) {
apiWorker.postProcess(parsedFiles, filenames, preProcess, packageInfos, 'defineQueryTitle', 'query', _messages);
}

/**
* Exports
*/
module.exports = {
preProcess : preProcess,
postProcess: postProcess
};
130 changes: 130 additions & 0 deletions test/parser_api_body_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
/*jshint unused:false*/

/**
* Test: Parser apiParam
*/

// node modules
var should = require('should');

// lib modules
var parser = require('../lib/parsers/api_body');

describe('Parser: apiParam', function() {

// TODO: Add 1.000 more possible cases ;-)
var testCases = [
{
title: 'Simple fieldname only',
content: 'simple',
expected: {
group: 'Body',
type: undefined,
size: undefined,
allowedValues: undefined,
optional: false,
field: 'simple',
defaultValue: undefined,
description: ''
}
},
{
title: 'Type, Fieldname, Description',
content: '{String} name The users name.',
expected: {
group: 'Body',
type: 'String',
size: undefined,
allowedValues: undefined,
optional: false,
field: 'name',
defaultValue: undefined,
description: 'The users name.'
}
},
{
title: 'Type, Fieldname, Description',
content: '{String|String[]} name The users name.',
expected: {
group: 'Body',
type: 'String|String[]',
size: undefined,
allowedValues: undefined,
optional: false,
field: 'name',
defaultValue: undefined,
description: 'The users name.'
}
},
{
title: '$Simple fieldname only',
content: '$simple',
expected: {
group: 'Body',
type: undefined,
size: undefined,
allowedValues: undefined,
optional: false,
field: '$simple',
defaultValue: undefined,
description: ''
}
},
{
title: 'All options, with optional defaultValue',
content: ' ( MyGroup ) { \\Object\\String.uni-code_char[] { 1..10 } = \'abc\', \'def\' } ' +
'[ \\MyClass\\field.user_first-name = \'John Doe\' ] Some description.',
expected: {
group: 'MyGroup',
type: '\\Object\\String.uni-code_char[]',
size: '1..10',
allowedValues: [ '\'abc\'', '\'def\'' ],
optional: true,
field: '\\MyClass\\field.user_first-name',
defaultValue: 'John Doe',
description: 'Some description.'
}
},
{
title: 'All options, without optional-marker',
content: ' ( MyGroup ) { \\Object\\String.uni-code_char[] { 1..10 } = \'abc\', \'def\' } ' +
'\\MyClass\\field.user_first-name = \'John Doe\' Some description.',
expected: {
group: 'MyGroup',
type: '\\Object\\String.uni-code_char[]',
size: '1..10',
allowedValues: [ '\'abc\'', '\'def\'' ],
optional: false,
field: '\\MyClass\\field.user_first-name',
defaultValue: 'John Doe',
description: 'Some description.'
}
},
{
title: 'All options, without optional-marker, without default value quotes',
content: ' ( MyGroup ) { \\Object\\String.uni-code_char[] { 1..10 } = \'abc\', \'def\' } ' +
'\\MyClass\\field.user_first-name = John_Doe Some description.',
expected: {
group: 'MyGroup',
type: '\\Object\\String.uni-code_char[]',
size: '1..10',
allowedValues: [ '\'abc\'', '\'def\'' ],
optional: false,
field: '\\MyClass\\field.user_first-name',
defaultValue: 'John_Doe',
description: 'Some description.'
}
},
];

// create
it('case 1: should pass all regexp test cases', function(done) {
testCases.forEach(function(testCase) {
var parsed = parser.parse(testCase.content);
(parsed !== null).should.equal(true, 'Title: ' + testCase.title + ', Source: ' + testCase.content);
parsed.should.eql(testCase.expected);
});
done();
});

});
86 changes: 86 additions & 0 deletions test/parser_api_query_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
/*jshint unused:false*/

/**
* Test: Parser apiParam
*/

// node modules
var should = require('should');

// lib modules
var parser = require('../lib/parsers/api_query');

describe('Parser: apiQuery', function() {

// TODO: Add 1.000 more possible cases ;-)
var testCases = [
{
title: 'Type, Fieldname, Description',
content: '{String} name The users name.',
expected: {
group: 'Query',
type: 'String',
size: undefined,
allowedValues: undefined,
optional: false,
field: 'name',
defaultValue: undefined,
description: 'The users name.'
}
},
{
title: 'Type, Fieldname, Description',
content: '{String|String[]} name The users name.',
expected: {
group: 'Query',
type: 'String|String[]',
size: undefined,
allowedValues: undefined,
optional: false,
field: 'name',
defaultValue: undefined,
description: 'The users name.'
}
},
{
title: '$Simple fieldname only',
content: '$simple',
expected: {
group: 'Query',
type: undefined,
size: undefined,
allowedValues: undefined,
optional: false,
field: '$simple',
defaultValue: undefined,
description: ''
}
},
{
title: 'All options, with optional defaultValue',
content: ' ( MyGroup ) { \\Object\\String.uni-code_char[] { 1..10 } = \'abc\', \'def\' } ' +
'[ \\MyClass\\field.user_first-name = \'John Doe\' ] Some description.',
expected: {
group: 'MyGroup',
type: '\\Object\\String.uni-code_char[]',
size: '1..10',
allowedValues: [ '\'abc\'', '\'def\'' ],
optional: true,
field: '\\MyClass\\field.user_first-name',
defaultValue: 'John Doe',
description: 'Some description.'
}
},
];

// create
it('case 1: should pass all regexp test cases', function(done) {
testCases.forEach(function(testCase) {
var parsed = parser.parse(testCase.content);
(parsed !== null).should.equal(true, 'Title: ' + testCase.title + ', Source: ' + testCase.content);
parsed.should.eql(testCase.expected);
});
done();
});

});