backbone style is BAD!

This commit is contained in:
Florent Vilmart
2016-03-02 20:28:00 -05:00
parent 43f014a47d
commit d872f52eff
2 changed files with 72 additions and 82 deletions

View File

@@ -254,46 +254,40 @@ describe('Parse.Relation testing', () => {
childObjects.push(new ChildObject({x: i})); childObjects.push(new ChildObject({x: i}));
} }
Parse.Object.saveAll(childObjects, { Parse.Object.saveAll(childObjects).then(() => {
success: function() { var ParentObject = Parse.Object.extend("ParentObject");
var ParentObject = Parse.Object.extend("ParentObject"); var parent = new ParentObject();
var parent = new ParentObject(); parent.set("x", 4);
parent.set("x", 4); var relation = parent.relation("child");
var relation = parent.relation("child"); relation.add(childObjects[0]);
relation.add(childObjects[0]); relation.add(childObjects[1]);
relation.add(childObjects[1]); relation.add(childObjects[2]);
relation.add(childObjects[2]); var parent2 = new ParentObject();
var parent2 = new ParentObject(); parent2.set("x", 3);
parent2.set("x", 3); var relation2 = parent2.relation("child");
var relation2 = parent2.relation("child"); relation2.add(childObjects[4]);
relation2.add(childObjects[4]); relation2.add(childObjects[5]);
relation2.add(childObjects[5]); relation2.add(childObjects[6]);
relation2.add(childObjects[6]);
var otherChild2 = parent2.relation("otherChild");
var otherChild2 = parent2.relation("otherChild"); otherChild2.add(childObjects[0]);
otherChild2.add(childObjects[0]); otherChild2.add(childObjects[1]);
otherChild2.add(childObjects[1]); otherChild2.add(childObjects[2]);
otherChild2.add(childObjects[2]);
var parents = []; var parents = [];
parents.push(parent); parents.push(parent);
parents.push(parent2); parents.push(parent2);
Parse.Object.saveAll(parents, { return Parse.Object.saveAll(parents);
success: function() { }).then(() => {
var query = new Parse.Query(ParentObject); var query = new Parse.Query(ParentObject);
var objects = []; var objects = [];
objects.push(childObjects[0]); objects.push(childObjects[0]);
query.containedIn("child", objects); query.containedIn("child", objects);
query.containedIn("otherChild", [childObjects[0]]); query.containedIn("otherChild", [childObjects[0]]);
query.find({ return query.find();
success: function(list) { }).then((list) => {
equal(list.length, 2, "There should be 2 results"); equal(list.length, 2, "There should be 2 results");
done(); done();
}
});
}
});
}
}); });
}); });
@@ -304,8 +298,7 @@ describe('Parse.Relation testing', () => {
childObjects.push(new ChildObject({x: i})); childObjects.push(new ChildObject({x: i}));
} }
Parse.Object.saveAll(childObjects, { Parse.Object.saveAll(childObjects).then(() => {
success: function() {
var ParentObject = Parse.Object.extend("ParentObject"); var ParentObject = Parse.Object.extend("ParentObject");
var parent = new ParentObject(); var parent = new ParentObject();
parent.set("x", 4); parent.set("x", 4);
@@ -323,25 +316,22 @@ describe('Parse.Relation testing', () => {
parents.push(parent2); parents.push(parent2);
parents.push(new ParentObject()); parents.push(new ParentObject());
Parse.Object.saveAll(parents, { return Parse.Object.saveAll(parents).then(() => {
success: function() { var query1 = new Parse.Query(ParentObject);
var query1 = new Parse.Query(ParentObject); query1.containedIn("toChilds", [childObjects[2]]);
query1.containedIn("toChilds", [childObjects[2]]); var query2 = new Parse.Query(ParentObject);
var query2 = new Parse.Query(ParentObject); query2.equalTo("toChild", childObjects[2]);
query2.equalTo("toChild", childObjects[2]); var query = Parse.Query.or(query1, query2);
var query = Parse.Query.or(query1, query2); return query.find().then((list) => {
query.find({ var objectIds = list.map(function(item){
success: function(list) { return item.id;
list = list.filter(function(item){
return item.id == parent.id || item.id == parent2.id;
});
equal(list.length, 2, "There should be 2 results");
done();
}
}); });
} expect(objectIds.indexOf(parent.id)).not.toBe(-1);
expect(objectIds.indexOf(parent2.id)).not.toBe(-1);
equal(list.length, 2, "There should be 2 results");
done();
});
}); });
}
}); });
}); });

View File

@@ -408,31 +408,31 @@ DatabaseController.prototype.reduceInRelation = function(className, query, schem
})); }));
} }
return Object.keys(query).reduce((promise, key) => { let promises = Object.keys(query).map((key) => {
return promise.then(() => { if (query[key] && (query[key]['$in'] || query[key].__type == 'Pointer')) {
if (query[key] && let t = schema.getExpectedType(className, key);
(query[key]['$in'] || query[key].__type == 'Pointer')) { let match = t ? t.match(/^relation<(.*)>$/) : false;
let t = schema.getExpectedType(className, key); if (!match) {
let match = t ? t.match(/^relation<(.*)>$/) : false; return Promise.resolve(query);
if (!match) {
return Promise.resolve(query);
}
let relatedClassName = match[1];
let relatedIds;
if (query[key]['$in']) {
relatedIds = query[key]['$in'].map(r => r.objectId);
} else {
relatedIds = [query[key].objectId];
}
return this.owningIds(className, key, relatedIds).then((ids) => {
delete query[key];
query.objectId = Object.assign({'$in': []}, query.objectId);
query.objectId['$in'] = query.objectId['$in'].concat(ids);
return Promise.resolve(query);
});
} }
}); let relatedClassName = match[1];
}, Promise.resolve()).then(() => { let relatedIds;
if (query[key]['$in']) {
relatedIds = query[key]['$in'].map(r => r.objectId);
} else {
relatedIds = [query[key].objectId];
}
return this.owningIds(className, key, relatedIds).then((ids) => {
delete query[key];
query.objectId = Object.assign({'$in': []}, query.objectId);
query.objectId['$in'] = query.objectId['$in'].concat(ids);
return Promise.resolve(query);
});
}
return Promise.resolve(query);
})
return Promise.all(promises).then(() => {
return Promise.resolve(query); return Promise.resolve(query);
}) })
}; };