diff --git a/spec/ParseQuery.spec.js b/spec/ParseQuery.spec.js index 4537a0737e..759f4f551a 100644 --- a/spec/ParseQuery.spec.js +++ b/spec/ParseQuery.spec.js @@ -2393,4 +2393,44 @@ describe('Parse.Query testing', () => { done(); }); }); + + it('include for specific object', function(done){ + var child = new Parse.Object('Child'); + var parent = new Parse.Object('Parent'); + child.set('foo', 'bar'); + parent.set('child', child); + Parse.Object.saveAll([child, parent], function(response){ + var savedParent = response[1]; + var parentQuery = new Parse.Query('Parent'); + parentQuery.include('child'); + parentQuery.get(savedParent.id, { + success: function(parentObj) { + var childPointer = parentObj.get('child'); + ok(childPointer); + equal(childPointer.get('foo'), 'bar'); + done(); + } + }); + }); + }); + + it('select keys for specific object', function(done){ + var Foobar = new Parse.Object('Foobar'); + Foobar.set('foo', 'bar'); + Foobar.set('fizz', 'buzz'); + Foobar.save({ + success: function(savedFoobar){ + var foobarQuery = new Parse.Query('Foobar'); + foobarQuery.select('fizz'); + foobarQuery.get(savedFoobar.id,{ + success: function(foobarObj){ + equal(foobarObj.get('fizz'), 'buzz'); + equal(foobarObj.get('foo'), undefined); + done(); + } + }); + } + }) + }); + }); diff --git a/src/Routers/ClassesRouter.js b/src/Routers/ClassesRouter.js index 57efa95dd0..fd90217bcf 100644 --- a/src/Routers/ClassesRouter.js +++ b/src/Routers/ClassesRouter.js @@ -4,6 +4,8 @@ import rest from '../rest'; import url from 'url'; +const ALLOWED_GET_QUERY_KEYS = ['keys', 'include']; + export class ClassesRouter extends PromiseRouter { handleFind(req) { @@ -59,7 +61,23 @@ export class ClassesRouter extends PromiseRouter { // Returns a promise for a {response} object. handleGet(req) { - return rest.find(req.config, req.auth, req.params.className, {objectId: req.params.objectId}) + let body = Object.assign(req.body, ClassesRouter.JSONFromQuery(req.query)); + let options = {}; + + for (let key of Object.keys(body)) { + if (ALLOWED_GET_QUERY_KEYS.indexOf(key) === -1) { + throw new Parse.Error(Parse.Error.INVALID_QUERY, 'Improper encode of parameter'); + } + } + + if (typeof body.keys == 'string') { + options.keys = body.keys; + } + if (body.include) { + options.include = String(body.include); + } + + return rest.find(req.config, req.auth, req.params.className, {objectId: req.params.objectId}, options) .then((response) => { if (!response.results || response.results.length == 0) { throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Object not found.');