Kouhei Sutou
null+****@clear*****
Wed Mar 26 23:19:58 JST 2014
Kouhei Sutou 2014-03-26 23:19:58 +0900 (Wed, 26 Mar 2014) New Revision: 4e7aab06bc959b460af1be6f639a21aaba56d12b https://github.com/droonga/express-droonga/commit/4e7aab06bc959b460af1be6f639a21aaba56d12b Message: /tables/:tableName: support "adjusters" parameter Here is the minimum parameter in URL: adjusters[COLUMN_NAME][value]=VALUE Modified files: lib/adapter/api/rest-request-builder.js test/rest-request-builder.test.js Modified: lib/adapter/api/rest-request-builder.js (+27 -0) =================================================================== --- lib/adapter/api/rest-request-builder.js 2014-03-26 23:16:27 +0900 (8d27795) +++ lib/adapter/api/rest-request-builder.js 2014-03-26 23:19:58 +0900 (1f45f3f) @@ -30,6 +30,30 @@ function getArrayValue(params, key) { } } +function buildAdjusters(requestAdjusters) { + var adjusters = []; + + var keys = Object.keys(requestAdjusters) + keys.forEach(function(key) { + var requestAdjuster = requestAdjusters[key] + var adjuster = { + column: key + }; + + if ('column' in requestAdjuster) + adjuster.column = requestAdjuster.column; + // TODO: Value is required. Validate it. + if ('value' in requestAdjuster) + adjuster.value = requestAdjuster.value; + if ('factor' in requestAdjuster) + adjuster.factor = requestAdjuster.factor; + + adjusters.push(adjuster); + }); + + return adjusters; +} + function buildSearchQuery(tableName, queryParams) { var query = { source: tableName, @@ -72,6 +96,9 @@ function buildSearchQuery(tableName, queryParams) { } } + if ('adjusters' in queryParams) + query.adjusters = buildAdjusters(queryParams.adjusters); + if ('offset' in queryParams) query.output.offset = getIntegerValue(queryParams, 'offset'); if ('sort_by' in queryParams) Modified: test/rest-request-builder.test.js (+69 -0) =================================================================== --- test/rest-request-builder.test.js 2014-03-26 23:16:27 +0900 (b8792b8) +++ test/rest-request-builder.test.js 2014-03-26 23:19:58 +0900 (b41998e) @@ -180,6 +180,75 @@ suite('building message from REST adapter request', function() { }); // TODO: split test file + suite('adjusters', function() { + var request; + + setup(function () { + request = { + params: { + tableName: 'Memos' + }, + query: { + } + }; + }); + + function buildQuery(adjusters) { + var name = 'memos'; + request.query.adjusters = adjusters; + return builders.search(request).queries[name]; + }; + + test('no column', function() { + var adjusters = { + tags: { + value: 'Droonga' + } + }; + assert.equalJSON(buildQuery(adjusters).adjusters, + [ + { + column: 'tags', + value: 'Droonga' + } + ]); + }); + + test('column', function() { + var adjusters = { + tags: { + column: 'categories', + value: 'Droonga' + } + }; + assert.equalJSON(buildQuery(adjusters).adjusters, + [ + { + column: 'categories', + value: 'Droonga' + } + ]); + }); + + test('factor', function() { + var adjusters = { + tags: { + value: 'Droonga', + factor: 9 + } + }; + assert.equalJSON(buildQuery(adjusters).adjusters, + [ + { + column: 'tags', + value: 'Droonga', + factor: 9 + } + ]); + }); + }); + + // TODO: split test file suite('group_by', function() { var request; -------------- next part -------------- HTML����������������������������... ダウンロード