Navigation Menu

Skip to content

Commit

Permalink
q: pass query as property instead of argument
Browse files Browse the repository at this point in the history
  • Loading branch information
kou committed Aug 3, 2012
1 parent a5f2f5c commit 2b095ee
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 40 deletions.
51 changes: 26 additions & 25 deletions lib/q-translator.js
Expand Up @@ -14,49 +14,50 @@
*/


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) {
return term.replace(/'/, "\\'");
}

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);
}
};

Expand Down
23 changes: 8 additions & 15 deletions test/q-translator.test.js
Expand Up @@ -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,
Expand All @@ -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,
Expand Down

0 comments on commit 2b095ee

Please sign in to comment.