[Groonga-commit] groonga/gcs [master] q: pass query as property instead of argument

Zurück zum Archiv-Index

null+****@clear***** null+****@clear*****
2012年 8月 3日 (金) 21:54:51 JST


Kouhei Sutou	2012-08-03 21:54:51 +0900 (Fri, 03 Aug 2012)

  New Revision: 2b095ee0e60194896a45b1d18e272b4fbd0d330c
  https://github.com/groonga/gcs/commit/2b095ee0e60194896a45b1d18e272b4fbd0d330c

  Log:
    q: pass query as property instead of argument

  Modified files:
    lib/q-translator.js
    test/q-translator.test.js

  Modified: lib/q-translator.js (+26 -25)
===================================================================
--- lib/q-translator.js    2012-08-03 21:50:42 +0900 (90b4a15)
+++ lib/q-translator.js    2012-08-03 21:54:51 +0900 (2b9fa1d)
@@ -14,18 +14,9 @@
 */
 
 
-function QueryTranslator() {
-}
-
-function throwTranslateError(query, context, detail) {
-  var message = "";
-  message += "<";
-  message += query.substring(0, context.offset);
-  message += "|" + query[context.offset] + "|";
-  message += query.substring(context.offset + 1);
-  message += ">";
-  message += ": " + detail;
-  throw new Error(message);
+function QueryTranslator(query) {
+  this.query = query;
+  this.offset = 0;
 }
 
 function escapeTerm(term) {
@@ -33,30 +24,40 @@ function escapeTerm(term) {
 }
 
 QueryTranslator.prototype = {
-  translateIndividualTerm: function(query, context) {
+  translateIndividualTerm: function() {
     var term = '';
-    for (; context.offset < query.length; context.offset++) {
-      if (/[ \+\-\|]/.test(query[context.offset])) {
+    for (; this.offset < this.query.length; this.offset++) {
+      if (/[ \+\-\|]/.test(this.query[this.offset])) {
         break;
       }
-      term += query[context.offset];
+      term += this.query[this.offset];
     }
-    return context.defaultField + ":'" + escapeTerm(term) + "'";
+    return this.defaultField + ":'" + escapeTerm(term) + "'";
   },
-  translateTerm: function(query, context) {
-    this.skipSpaces(query, context);
-    if (query[context.offset] == '"') {
-      return this.translatePhraseTerm(query, context);
+  translateTerm: function() {
+    this.skipSpaces(this.query, this);
+    if (this.query[this.offset] == '"') {
+      return this.translatePhraseTerm(this.query, this);
     } else {
-      return this.translateIndividualTerm(query, context);
+      return this.translateIndividualTerm(this.query, this);
     }
   },
-  skipSpaces: function(query, context) {
-    for (; context.offset < query.length; context.offset++) {
-      if (query[context.offset] != " ") {
+  skipSpaces: function() {
+    for (; this.offset < this.query.length; this.offset++) {
+      if (this.query[this.offset] != " ") {
         return;
       }
     }
+  },
+  throwTranslateError: function(detail) {
+    var message = "";
+    message += "<";
+    message += this.query.substring(0, this.offset);
+    message += "|" + this.query[this.offset] + "|";
+    message += this.query.substring(this.offset + 1);
+    message += ">";
+    message += ": " + detail;
+    throw new Error(message);
   }
 };
 

  Modified: test/q-translator.test.js (+8 -15)
===================================================================
--- test/q-translator.test.js    2012-08-03 21:50:42 +0900 (3440ec4)
+++ test/q-translator.test.js    2012-08-03 21:54:51 +0900 (c6cca75)
@@ -9,16 +9,12 @@ function testIndividualTerm(label, individualTerm, expectedBooleanQuery,
                             expectedOffset) {
   test('individual term: ' + label + ': ' +
        '<' + individualTerm + '> -> <' + expectedBooleanQuery + '>', function() {
-    var translator = new QueryTranslator();
-    var context = {
-      offset: 0,
-      defaultField: 'field'
-    };
-    var actualBooleanQuery =
-          translator.translateIndividualTerm(individualTerm, context);
+    var translator = new QueryTranslator(individualTerm);
+    translator.defaultField = "field";
+    var actualBooleanQuery = translator.translateIndividualTerm();
     assert.deepEqual({
                        booleanQuery: actualBooleanQuery,
-                       offset: context.offset
+                       offset: translator.offset
                      },
                      {
                        booleanQuery: expectedBooleanQuery,
@@ -30,15 +26,12 @@ function testIndividualTerm(label, individualTerm, expectedBooleanQuery,
 function testTerm(label, term, expectedBooleanQuery, expectedOffset) {
   test('term: ' + label + ': ' +
        '<' + term + '> -> <' + expectedBooleanQuery + '>', function() {
-    var translator = new QueryTranslator();
-    var context = {
-      offset: 0,
-      defaultField: 'field'
-    };
-    var actualBooleanQuery = translator.translateTerm(term, context);
+    var translator = new QueryTranslator(term);
+    translator.defaultField = "field";
+    var actualBooleanQuery = translator.translateTerm();
     assert.deepEqual({
                        booleanQuery: actualBooleanQuery,
-                       offset: context.offset
+                       offset: translator.offset
                      },
                      {
                        booleanQuery: expectedBooleanQuery,
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
Download 



Groonga-commit メーリングリストの案内
Zurück zum Archiv-Index