Skip to content

Commit a770c4c

Browse files
committed
Adds relation fields to objects
1 parent de2a2ee commit a770c4c

File tree

4 files changed

+55
-0
lines changed

4 files changed

+55
-0
lines changed

spec/ParseAPI.spec.js

+29
Original file line numberDiff line numberDiff line change
@@ -1271,4 +1271,33 @@ describe('miscellaneous', function() {
12711271
});
12721272
});
12731273

1274+
it('gets relation fields', (done) => {
1275+
let object = new Parse.Object('AnObject');
1276+
let relatedObject = new Parse.Object('RelatedObject');
1277+
Parse.Object.saveAll([object, relatedObject]).then(() => {
1278+
object.relation('related').add(relatedObject);
1279+
return object.save();
1280+
}).then(() => {
1281+
let headers = {
1282+
'Content-Type': 'application/json',
1283+
'X-Parse-Application-Id': 'test',
1284+
'X-Parse-REST-API-Key': 'rest'
1285+
};
1286+
let requestOptions = {
1287+
headers: headers,
1288+
url: 'http://localhost:8378/1/classes/AnObject',
1289+
json: true
1290+
};
1291+
request.get(requestOptions, (err, res, body) => {
1292+
expect(body.results.length).toBe(1);
1293+
let result = body.results[0];
1294+
expect(result.related).toEqual({
1295+
__type: "Relation",
1296+
className: 'RelatedObject'
1297+
})
1298+
done();
1299+
});
1300+
})
1301+
})
1302+
12741303
});

spec/transform.spec.js

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ var dummySchema = {
1313
return 'geopoint';
1414
}
1515
return;
16+
},
17+
getRelationFields: function() {
18+
return {}
1619
}
1720
};
1821

src/Schema.js

+18
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,24 @@ class Schema {
634634
}
635635
return false;
636636
};
637+
638+
getRelationFields(className) {
639+
if (this.data && this.data[className]) {
640+
let classData = this.data[className];
641+
return Object.keys(classData).filter((field) => {
642+
return classData[field].startsWith('relation');
643+
}).reduce((memo, field) => {
644+
let type = classData[field];
645+
let className = type.slice('relation<'.length, type.length - 1);
646+
memo[field] = {
647+
__type: 'Relation',
648+
className: className
649+
};
650+
return memo;
651+
}, {});
652+
}
653+
return {};
654+
}
637655
}
638656

639657
// Returns a promise for a new Schema.

src/transform.js

+5
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,11 @@ function untransformObject(schema, className, mongoObject, isNestedObject = fals
732732
mongoObject[key], true);
733733
}
734734
}
735+
736+
if (!isNestedObject) {
737+
let relationFields = schema.getRelationFields(className);
738+
Object.assign(restObject, relationFields);
739+
}
735740
return restObject;
736741
default:
737742
throw 'unknown js type';

0 commit comments

Comments
 (0)