[Groonga-commit] droonga/express-droonga at 4e7aab0 [master] /tables/:tableName: support "adjusters" parameter

アーカイブの一覧に戻る

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����������������������������...
ダウンロード 



More information about the Groonga-commit mailing list
アーカイブの一覧に戻る