Skip to content

Commit 537e9c1

Browse files
committed
multiple within the same object works
1 parent 7f34292 commit 537e9c1

File tree

2 files changed

+56
-7
lines changed

2 files changed

+56
-7
lines changed

src/serializers/basic-query-test.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,40 @@ testHelpers.dev.devOnlyTest("warn if query properties are not defined (#8)", fun
175175
QUnit.equal(finishErrorCheck(), 1);
176176
});
177177

178+
QUnit.test("gt and lt", function(){
179+
var query = {
180+
filter: {
181+
age: {
182+
$gt: 0,
183+
$lt: 100
184+
}
185+
}
186+
};
187+
188+
var converter = makeBasicQueryConvert(EmptySchema);
189+
190+
var basicQuery = converter.hydrate(query);
191+
192+
QUnit.deepEqual(basicQuery.filter, new logicTypes.KeysAnd({
193+
age: new is.And([
194+
new is.GreaterThan(0),
195+
new is.LessThan(100)
196+
])
197+
}));
198+
199+
var res = converter.serializer.serialize(basicQuery);
200+
201+
QUnit.deepEqual(res, {
202+
filter: {
203+
age: {
204+
$gt: 0,
205+
$lt: 100
206+
}
207+
}
208+
});
209+
210+
});
211+
178212
/*
179213
QUnit.skip("nested properties within ors", function(){
180214
var query = {

src/serializers/comparisons.js

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var is = require("../types/comparisons");
22
var Serializer = require("../serializer");
3+
var canReflect = require("can-reflect");
34

45
function makeNew(Constructor) {
56
return function(value){
@@ -45,7 +46,7 @@ addHydrateFrom("$gt", makeNew(is.GreaterThan));
4546
addHydrateFrom("$gte", makeNew(is.GreaterThanEqual));
4647
addHydrateFromValues("$in", makeNew(is.In));
4748
addHydrateFrom("$lt", makeNew(is.LessThan));
48-
addHydrateFrom("$lt", makeNew(is.LessThanEqual));
49+
addHydrateFrom("$lte", makeNew(is.LessThanEqual));
4950
addHydrateFromValues("$nin", makeNew(is.GreaterThan));
5051

5152

@@ -66,6 +67,13 @@ var serializer = new Serializer([
6667
[is.GreaterThanEqual, function(gte, serialize){ return {$gte: serialize(gte.value) }; }],
6768
[is.LessThan, function(lt, serialize){ return {$lt: serialize(lt.value) }; }],
6869
[is.LessThanEqual, function(lt, serialize){ return {$lte: serialize(lt.value) }; }],
70+
[is.And, function(and, serialize){
71+
var obj = {};
72+
and.values.forEach(function(clause){
73+
canReflect.assignMap(obj, serialize(clause) );
74+
});
75+
return obj;
76+
}]
6977
/*[is.Or, function(or, serialize){
7078
return {
7179
$or: or.values.map(function(value){
@@ -87,13 +95,20 @@ module.exports = {
8795
}
8896
else if(value && typeof value === "object") {
8997
var keys = Object.keys(value);
90-
if(keys.length === 1) {
91-
var first = keys[0];
92-
var hydrator = hydrateMap[first];
93-
if(!hydrator) {
94-
return hydrateUnknown(value);
98+
var allKeysAreComparisons = keys.every(function(key){
99+
return hydrateMap[key]
100+
})
101+
if(allKeysAreComparisons) {
102+
var andClauses = keys.map(function(key){
103+
var part = {};
104+
part[key] = value[key];
105+
var hydrator = hydrateMap[key];
106+
return hydrator(part, hydrateUnknown);
107+
});
108+
if(andClauses.length > 1) {
109+
return new is.And(andClauses);
95110
} else {
96-
return hydrator(value, hydrateUnknown);
111+
return andClauses[0];
97112
}
98113
} else {
99114
return hydrateUnknown(value);

0 commit comments

Comments
 (0)