Skip to content

Commit 5779709

Browse files
committed
Closes #166.
1 parent 58db02f commit 5779709

20 files changed

+83
-2
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- #155 - Allow deserialize and serialize to be configured per-method as well
66
- #159 - Find which items from collection have changed with lastModified
77
- #161 - Allow the http method of DSHttpAdapter methods to be configured
8+
- #166 - Add ID Resolver
89
- #167 - Default params argument of bindAll to empty object
910
- #171 - "not in" query
1011

dist/angular-data.js

+40
Original file line numberDiff line numberDiff line change
@@ -2373,6 +2373,7 @@ function destroy(resourceName, id, options) {
23732373

23742374
options = options || {};
23752375

2376+
id = DS.utils.resolveId(definition, id);
23762377
if (!definition) {
23772378
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
23782379
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {
@@ -3095,6 +3096,7 @@ function refresh(resourceName, id, options) {
30953096

30963097
options = options || {};
30973098

3099+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
30983100
if (!DS.definitions[resourceName]) {
30993101
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
31003102
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {
@@ -3180,6 +3182,7 @@ function save(resourceName, id, options) {
31803182

31813183
options = options || {};
31823184

3185+
id = DS.utils.resolveId(definition, id);
31833186
if (!definition) {
31843187
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
31853188
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {
@@ -3330,6 +3333,7 @@ function update(resourceName, id, attrs, options) {
33303333

33313334
options = options || {};
33323335

3336+
id = DS.utils.resolveId(definition, id);
33333337
if (!definition) {
33343338
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
33353339
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {
@@ -4411,6 +4415,7 @@ function bindOne(scope, expr, resourceName, id, cb) {
44114415
var DS = this;
44124416
var IA = DS.errors.IA;
44134417

4418+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
44144419
if (!DS.utils.isObject(scope)) {
44154420
throw new IA(errorPrefix(resourceName) + 'scope: Must be an object!');
44164421
} else if (!DS.utils.isString(expr)) {
@@ -4487,6 +4492,8 @@ function changeHistory(resourceName, id) {
44874492
var DSUtils = DS.utils;
44884493
var definition = DS.definitions[resourceName];
44894494
var resource = DS.store[resourceName];
4495+
4496+
id = DS.utils.resolveId(definition, id);
44904497
if (resourceName && !DS.definitions[resourceName]) {
44914498
throw new DS.errors.NER(errorPrefix(resourceName) + resourceName);
44924499
} else if (id && !DSUtils.isString(id) && !DSUtils.isNumber(id)) {
@@ -4551,6 +4558,8 @@ function errorPrefix(resourceName) {
45514558
*/
45524559
function changes(resourceName, id) {
45534560
var DS = this;
4561+
4562+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
45544563
if (!DS.definitions[resourceName]) {
45554564
throw new DS.errors.NER(errorPrefix(resourceName) + resourceName);
45564565
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {
@@ -4655,6 +4664,7 @@ function compute(resourceName, instance) {
46554664
var IA = DS.errors.IA;
46564665
var definition = DS.definitions[resourceName];
46574666

4667+
instance = DS.utils.resolveItem(DS.store[resourceName], instance);
46584668
if (!definition) {
46594669
throw new DS.errors.NER(errorPrefix(resourceName) + resourceName);
46604670
} else if (!DS.utils.isObject(instance) && !DS.utils.isString(instance) && !DS.utils.isNumber(instance)) {
@@ -5211,6 +5221,8 @@ function _eject(definition, resource, id) {
52115221
function eject(resourceName, id) {
52125222
var DS = this;
52135223
var definition = DS.definitions[resourceName];
5224+
5225+
id = DS.utils.resolveId(definition, id);
52145226
if (!definition) {
52155227
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
52165228
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {
@@ -5540,6 +5552,8 @@ function diffIsEmpty(utils, diff) {
55405552
*/
55415553
function hasChanges(resourceName, id) {
55425554
var DS = this;
5555+
5556+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
55435557
if (!DS.definitions[resourceName]) {
55445558
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
55455559
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {
@@ -6127,6 +6141,8 @@ function errorPrefix(resourceName, id) {
61276141
function lastModified(resourceName, id) {
61286142
var DS = this;
61296143
var resource = DS.store[resourceName];
6144+
6145+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
61306146
if (!DS.definitions[resourceName]) {
61316147
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
61326148
} else if (id && !DS.utils.isString(id) && !DS.utils.isNumber(id)) {
@@ -6192,6 +6208,8 @@ function errorPrefix(resourceName, id) {
61926208
function lastSaved(resourceName, id) {
61936209
var DS = this;
61946210
var resource = DS.store[resourceName];
6211+
6212+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
61956213
if (!DS.definitions[resourceName]) {
61966214
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
61976215
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {
@@ -6282,6 +6300,7 @@ function link(resourceName, id, relations) {
62826300

62836301
relations = relations || [];
62846302

6303+
id = DS.utils.resolveId(definition, id);
62856304
if (!definition) {
62866305
throw new DS.errors.NER(errorPrefix(resourceName) + resourceName);
62876306
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {
@@ -6495,6 +6514,8 @@ function linkInverse(resourceName, id, relations) {
64956514

64966515
relations = relations || [];
64976516

6517+
6518+
id = DS.utils.resolveId(definition, id);
64986519
if (!definition) {
64996520
throw new DS.errors.NER(errorPrefix(resourceName) + resourceName);
65006521
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {
@@ -6562,6 +6583,8 @@ function errorPrefix(resourceName, id) {
65626583
*/
65636584
function previous(resourceName, id) {
65646585
var DS = this;
6586+
6587+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
65656588
if (!DS.definitions[resourceName]) {
65666589
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
65676590
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {
@@ -6648,6 +6671,7 @@ function unlinkInverse(resourceName, id, relations) {
66486671

66496672
relations = relations || [];
66506673

6674+
id = DS.utils.resolveId(definition, id);
66516675
if (!definition) {
66526676
throw new DS.errors.NER(errorPrefix(resourceName) + resourceName);
66536677
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {
@@ -6918,6 +6942,22 @@ module.exports = [function () {
69186942
remove: require('mout/array/remove'),
69196943
slice: require('mout/array/slice'),
69206944
sort: require('mout/array/sort'),
6945+
resolveItem: function (resource, idOrInstance) {
6946+
if (resource && (this.isString(idOrInstance) || this.isNumber(idOrInstance))) {
6947+
return resource.index[idOrInstance] || idOrInstance;
6948+
} else {
6949+
return idOrInstance;
6950+
}
6951+
},
6952+
resolveId: function (definition, idOrInstance) {
6953+
if (this.isString(idOrInstance) || this.isNumber(idOrInstance)) {
6954+
return idOrInstance;
6955+
} else if (idOrInstance && definition) {
6956+
return idOrInstance[definition.idAttribute] || idOrInstance;
6957+
} else {
6958+
return idOrInstance;
6959+
}
6960+
},
69216961
updateTimestamp: function (timestamp) {
69226962
var newTimestamp = typeof Date.now === 'function' ? Date.now() : new Date().getTime();
69236963
if (timestamp && newTimestamp <= timestamp) {

dist/angular-data.min.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/datastore/async_methods/destroy.js

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ function destroy(resourceName, id, options) {
5454

5555
options = options || {};
5656

57+
id = DS.utils.resolveId(definition, id);
5758
if (!definition) {
5859
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
5960
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {

src/datastore/async_methods/refresh.js

+1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ function refresh(resourceName, id, options) {
5757

5858
options = options || {};
5959

60+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
6061
if (!DS.definitions[resourceName]) {
6162
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
6263
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {

src/datastore/async_methods/save.js

+1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ function save(resourceName, id, options) {
6161

6262
options = options || {};
6363

64+
id = DS.utils.resolveId(definition, id);
6465
if (!definition) {
6566
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
6667
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {

src/datastore/async_methods/update.js

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ function update(resourceName, id, attrs, options) {
6363

6464
options = options || {};
6565

66+
id = DS.utils.resolveId(definition, id);
6667
if (!definition) {
6768
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
6869
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {

src/datastore/sync_methods/bindOne.js

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ function bindOne(scope, expr, resourceName, id, cb) {
3737
var DS = this;
3838
var IA = DS.errors.IA;
3939

40+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
4041
if (!DS.utils.isObject(scope)) {
4142
throw new IA(errorPrefix(resourceName) + 'scope: Must be an object!');
4243
} else if (!DS.utils.isString(expr)) {

src/datastore/sync_methods/changeHistory.js

+2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ function changeHistory(resourceName, id) {
4242
var DSUtils = DS.utils;
4343
var definition = DS.definitions[resourceName];
4444
var resource = DS.store[resourceName];
45+
46+
id = DS.utils.resolveId(definition, id);
4547
if (resourceName && !DS.definitions[resourceName]) {
4648
throw new DS.errors.NER(errorPrefix(resourceName) + resourceName);
4749
} else if (id && !DSUtils.isString(id) && !DSUtils.isNumber(id)) {

src/datastore/sync_methods/changes.js

+2
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ function errorPrefix(resourceName) {
3939
*/
4040
function changes(resourceName, id) {
4141
var DS = this;
42+
43+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
4244
if (!DS.definitions[resourceName]) {
4345
throw new DS.errors.NER(errorPrefix(resourceName) + resourceName);
4446
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {

src/datastore/sync_methods/compute.js

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ function compute(resourceName, instance) {
7171
var IA = DS.errors.IA;
7272
var definition = DS.definitions[resourceName];
7373

74+
instance = DS.utils.resolveItem(DS.store[resourceName], instance);
7475
if (!definition) {
7576
throw new DS.errors.NER(errorPrefix(resourceName) + resourceName);
7677
} else if (!DS.utils.isObject(instance) && !DS.utils.isString(instance) && !DS.utils.isNumber(instance)) {

src/datastore/sync_methods/eject.js

+2
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ function _eject(definition, resource, id) {
7575
function eject(resourceName, id) {
7676
var DS = this;
7777
var definition = DS.definitions[resourceName];
78+
79+
id = DS.utils.resolveId(definition, id);
7880
if (!definition) {
7981
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
8082
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {

src/datastore/sync_methods/hasChanges.js

+2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ function diffIsEmpty(utils, diff) {
4444
*/
4545
function hasChanges(resourceName, id) {
4646
var DS = this;
47+
48+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
4749
if (!DS.definitions[resourceName]) {
4850
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
4951
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {

src/datastore/sync_methods/lastModified.js

+2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ function errorPrefix(resourceName, id) {
3838
function lastModified(resourceName, id) {
3939
var DS = this;
4040
var resource = DS.store[resourceName];
41+
42+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
4143
if (!DS.definitions[resourceName]) {
4244
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
4345
} else if (id && !DS.utils.isString(id) && !DS.utils.isNumber(id)) {

src/datastore/sync_methods/lastSaved.js

+2
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ function errorPrefix(resourceName, id) {
4646
function lastSaved(resourceName, id) {
4747
var DS = this;
4848
var resource = DS.store[resourceName];
49+
50+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
4951
if (!DS.definitions[resourceName]) {
5052
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
5153
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {

src/datastore/sync_methods/link.js

+1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ function link(resourceName, id, relations) {
7474

7575
relations = relations || [];
7676

77+
id = DS.utils.resolveId(definition, id);
7778
if (!definition) {
7879
throw new DS.errors.NER(errorPrefix(resourceName) + resourceName);
7980
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {

src/datastore/sync_methods/linkInverse.js

+2
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ function linkInverse(resourceName, id, relations) {
6969

7070
relations = relations || [];
7171

72+
73+
id = DS.utils.resolveId(definition, id);
7274
if (!definition) {
7375
throw new DS.errors.NER(errorPrefix(resourceName) + resourceName);
7476
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {

src/datastore/sync_methods/previous.js

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ function errorPrefix(resourceName, id) {
4040
*/
4141
function previous(resourceName, id) {
4242
var DS = this;
43+
44+
id = DS.utils.resolveId(DS.definitions[resourceName], id);
4345
if (!DS.definitions[resourceName]) {
4446
throw new DS.errors.NER(errorPrefix(resourceName, id) + resourceName);
4547
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {

src/datastore/sync_methods/unlinkInverse.js

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ function unlinkInverse(resourceName, id, relations) {
7171

7272
relations = relations || [];
7373

74+
id = DS.utils.resolveId(definition, id);
7475
if (!definition) {
7576
throw new DS.errors.NER(errorPrefix(resourceName) + resourceName);
7677
} else if (!DS.utils.isString(id) && !DS.utils.isNumber(id)) {

src/utils.js

+16
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,22 @@ module.exports = [function () {
2222
remove: require('mout/array/remove'),
2323
slice: require('mout/array/slice'),
2424
sort: require('mout/array/sort'),
25+
resolveItem: function (resource, idOrInstance) {
26+
if (resource && (this.isString(idOrInstance) || this.isNumber(idOrInstance))) {
27+
return resource.index[idOrInstance] || idOrInstance;
28+
} else {
29+
return idOrInstance;
30+
}
31+
},
32+
resolveId: function (definition, idOrInstance) {
33+
if (this.isString(idOrInstance) || this.isNumber(idOrInstance)) {
34+
return idOrInstance;
35+
} else if (idOrInstance && definition) {
36+
return idOrInstance[definition.idAttribute] || idOrInstance;
37+
} else {
38+
return idOrInstance;
39+
}
40+
},
2541
updateTimestamp: function (timestamp) {
2642
var newTimestamp = typeof Date.now === 'function' ? Date.now() : new Date().getTime();
2743
if (timestamp && newTimestamp <= timestamp) {

0 commit comments

Comments
 (0)