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