Skip to content

Commit b7408d4

Browse files
committed
Added fix for injecting relations on updated (re-injected) resources.
1 parent 1e21413 commit b7408d4

File tree

4 files changed

+36
-2
lines changed

4 files changed

+36
-2
lines changed

dist/angular-data.js

+5
Original file line numberDiff line numberDiff line change
@@ -6697,6 +6697,11 @@ function _inject(definition, resource, attrs, options) {
66976697
}
66986698
} else {
66996699
DS.utils.deepMixIn(item, attrs);
6700+
if (definition.relations && !item.$$angularData$$hasInjected) {
6701+
item.$$angularData$$hasInjected = true;
6702+
_injectRelations.call(DS, definition, item, options);
6703+
delete item.$$angularData$$hasInjected;
6704+
}
67006705
if (definition.resetHistoryOnInject) {
67016706
resource.previousAttributes[id] = {};
67026707
DS.utils.deepMixIn(resource.previousAttributes[id], attrs);

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/sync_methods/inject.js

+5
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@ function _inject(definition, resource, attrs, options) {
147147
}
148148
} else {
149149
DS.utils.deepMixIn(item, attrs);
150+
if (definition.relations && !item.$$angularData$$hasInjected) {
151+
item.$$angularData$$hasInjected = true;
152+
_injectRelations.call(DS, definition, item, options);
153+
delete item.$$angularData$$hasInjected;
154+
}
150155
if (definition.resetHistoryOnInject) {
151156
resource.previousAttributes[id] = {};
152157
DS.utils.deepMixIn(resource.previousAttributes[id], attrs);

test/integration/datastore/sync_methods/inject.test.js

+24
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,30 @@ describe('DS.inject(resourceName, attrs[, options])', function () {
197197
// profile21 relations
198198
assert.deepEqual(angular.toJson(DS.get('user', 22)), angular.toJson(DS.get('profile', 21).user));
199199
});
200+
it('should inject relations on update', function () {
201+
var userToInject = user18,
202+
userId = userToInject.id,
203+
orgToInject = organization15,
204+
orgId = orgToInject.id;
205+
206+
// can inject items with relations
207+
DS.inject('user', userToInject);
208+
DS.inject('organization', orgToInject);
209+
210+
var user = DS.get('user', userId);
211+
var org = DS.get('organization', orgId);
212+
213+
assert.strictEqual(user.organizationId, org.id);
214+
assert.strictEqual(org.users[2], user);
215+
216+
// can safely RE-inject these items, too
217+
DS.inject('user', angular.extend({organization: orgToInject}, userToInject));
218+
DS.inject('organization', orgToInject);
219+
220+
assert.strictEqual(DS.get('user', userId), user);
221+
assert.strictEqual(user.organization, org);
222+
assert.strictEqual(org.users[2], user);
223+
});
200224
it('should find inverse links', function () {
201225
DS.inject('user', { organizationId: 5, id: 1 });
202226

0 commit comments

Comments
 (0)