Skip to content
This repository was archived by the owner on Sep 6, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all 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: apiBody', 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();
});

});