Skip to content

Commit

Permalink
Merge pull request #231 from ParsePlatform/nlutsenko.transform.geopoint
Browse files Browse the repository at this point in the history
Fixed storage of GeoPoints in nested arrays/maps.
  • Loading branch information
nlutsenko committed Feb 4, 2016
2 parents 808d2cc + 437e772 commit ee5e06c
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 1 deletion.
43 changes: 43 additions & 0 deletions spec/ParseGeoPoint.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -287,4 +287,47 @@ describe('Parse.GeoPoint testing', () => {
done();
});
});

it('supports a sub-object with a geo point', done => {
var point = new Parse.GeoPoint(44.0, -11.0);
var obj = new TestObject();
obj.set('subobject', { location: point });
obj.save(null, {
success: function() {
var query = new Parse.Query(TestObject);
query.find({
success: function(results) {
equal(results.length, 1);
var pointAgain = results[0].get('subobject')['location'];
ok(pointAgain);
equal(pointAgain.latitude, 44.0);
equal(pointAgain.longitude, -11.0);
done();
}
});
}
});
});

it('supports array of geo points', done => {
var point1 = new Parse.GeoPoint(44.0, -11.0);
var point2 = new Parse.GeoPoint(22.0, -55.0);
var obj = new TestObject();
obj.set('locations', [ point1, point2 ]);
obj.save(null, {
success: function() {
var query = new Parse.Query(TestObject);
query.find({
success: function(results) {
equal(results.length, 1);
var locations = results[0].get('locations');
expect(locations.length).toEqual(2);
expect(locations[0]).toEqual(point1);
expect(locations[1]).toEqual(point2);
done();
}
});
}
});
});
});
23 changes: 23 additions & 0 deletions spec/transform.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,29 @@ describe('transformCreate', () => {
// This just checks that it doesn't crash, but it should check format.
done();
});

describe('GeoPoints', () => {
it('plain', (done) => {
var geoPoint = {__type: 'GeoPoint', longitude: 180, latitude: -180};
var out = transform.transformCreate(dummySchema, null, {location: geoPoint});
expect(out.location).toEqual([180, -180]);
done();
});

it('in array', (done) => {
var geoPoint = {__type: 'GeoPoint', longitude: 180, latitude: -180};
var out = transform.transformCreate(dummySchema, null, {locations: [geoPoint, geoPoint]});
expect(out.locations).toEqual([geoPoint, geoPoint]);
done();
});

it('in sub-object', (done) => {
var geoPoint = {__type: 'GeoPoint', longitude: 180, latitude: -180};
var out = transform.transformCreate(dummySchema, null, { locations: { start: geoPoint }});
expect(out).toEqual({ locations: { start: geoPoint } });
done();
});
});
});

describe('transformWhere', () => {
Expand Down
5 changes: 4 additions & 1 deletion transform.js
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,10 @@ function transformAtom(atom, force, options) {
return new Date(atom.iso);
}
if (atom.__type == 'GeoPoint') {
return [atom.longitude, atom.latitude];
if (!inArray && !inObject) {
return [atom.longitude, atom.latitude];
}
return atom;
}
if (atom.__type == 'Bytes') {
return new mongodb.Binary(new Buffer(atom.base64, 'base64'));
Expand Down

0 comments on commit ee5e06c

Please sign in to comment.