Skip to content

Commit 50e1099

Browse files
committed
fixes so maybe types with nested or types get fully expanded
1 parent a992329 commit 50e1099

File tree

3 files changed

+30
-11
lines changed

3 files changed

+30
-11
lines changed

can-query-logic-test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ QUnit.test("difference", function(){
6060
name: "Ramiya",
6161
}
6262
});
63+
64+
6365
});
6466

6567
QUnit.test("subset", function(){

src/serializers/basic-query.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,17 @@ function hydrateOrs(values, schemaProperties, hydrateUnknown ) {
193193
return new BasicQuery.Or(comparisons);
194194
}
195195

196-
196+
function recursivelyAddOrs(ors, value, serializer, key){
197+
value.orValues().forEach(function(orValue){
198+
if(typeof orValue.orValues === "function") {
199+
recursivelyAddOrs(ors, orValue, serializer, key);
200+
} else {
201+
var result = {};
202+
result[key] = serializer(orValue);
203+
ors.push( result );
204+
}
205+
});
206+
}
197207

198208
module.exports = function(schema) {
199209

@@ -212,16 +222,7 @@ module.exports = function(schema) {
212222
var result = {};
213223
canReflect.eachKey(and.values, function(value, key){
214224
// is value universal ... if not, we don't need to add anything
215-
216-
if(typeof value.orValues === "function") {
217-
canReflect.addValues( ors, value.orValues().map(function(orValue){
218-
var result = {};
219-
result[key] = serializer(orValue);
220-
return result;
221-
}) );
222-
} else {
223-
result[key] = serializer(value);
224-
}
225+
recursivelyAddOrs(ors, value, serializer, key);
225226
});
226227
if(ors.length) {
227228
if(ors.length === 1 ) {

test/maybe-type-test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,22 @@ QUnit.test("basics", function(){
4848
var serialized = todoQueryLogic.serialize(query);
4949
QUnit.deepEqual( serialized, {filter: {age: 21}}, "can serialize back to what was provided" );
5050

51+
res = todoQueryLogic.difference({},{
52+
filter: {
53+
age: {
54+
$gt: 3,
55+
$lt: 7
56+
}
57+
}
58+
});
59+
60+
QUnit.deepEqual(res.filter,
61+
{$or: [
62+
{age: {$gte: 7} },
63+
{age: {$lte: 3} },
64+
{age: {$in: [undefined, null]}}
65+
]});
66+
5167
});
5268

5369

0 commit comments

Comments
 (0)