Skip to content

Commit 1b43699

Browse files
committed
Merge pull request #66 from pixelhandler/container-deprecation
Use owner API instead of this.container (deprecated in 2.3)
2 parents 25b2a91 + 1e1d683 commit 1b43699

File tree

31 files changed

+258
-147
lines changed

31 files changed

+258
-147
lines changed

addon/adapters/application.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ export default Ember.Object.extend(FetchMixin, Ember.Evented, {
115115
type = resource.type;
116116
}
117117
// use resource's service if in container, otherwise use this service to fetch
118-
let service = this.container.lookup('service:' + pluralize(type)) || this;
118+
let owner = (typeof Ember.getOwner === 'function') ? Ember.getOwner(this) : this.container;
119+
let service = owner.lookup('service:' + pluralize(type)) || this;
119120
url = this.fetchUrl(url);
120121
return service.fetch(url, { method: 'GET' });
121122
},

addon/initializers/model-setup.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
@module ember-jsonapi-resources
3+
@submodule initializers
4+
**/
5+
6+
/**
7+
Initializer for the model factories, registers option to not initialize
8+
9+
@method initialize
10+
@for Resource
11+
*/
12+
export function initialize(application) {
13+
if (typeof application.registerOptionsForType === 'function') {
14+
application.registerOptionsForType('model', { instantiate: false });
15+
}
16+
}
17+
18+
export default {
19+
name: 'model-setup',
20+
initialize
21+
};

addon/models/resource.js

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import hasOne from 'ember-jsonapi-resources/utils/has-one';
1010
import hasMany from 'ember-jsonapi-resources/utils/has-many';
1111
import { isType } from 'ember-jsonapi-resources/utils/is';
1212

13+
const { computed, Logger } = Ember;
14+
1315
/**
1416
A Resource class to create JSON API resource objects
1517
@@ -230,7 +232,7 @@ const Resource = Ember.Object.extend({
230232
@method changedAttributes
231233
@return {Object} the changed attributes
232234
*/
233-
changedAttributes: Ember.computed('attributes', {
235+
changedAttributes: computed('attributes', {
234236
get: function () {
235237
const attrs = {};
236238
for (let key in this._attributes) {
@@ -248,7 +250,7 @@ const Resource = Ember.Object.extend({
248250
@method previousAttributes
249251
@return {Object} the previous attributes
250252
*/
251-
previousAttributes: Ember.computed('attributes', {
253+
previousAttributes: computed('attributes', {
252254
get: function () {
253255
const attrs = {};
254256
for (let key in this._attributes) {
@@ -347,7 +349,7 @@ const Resource = Ember.Object.extend({
347349
@property isCacheExpired
348350
@type Boolean
349351
*/
350-
isCacheExpired: Ember.computed('meta.timeStamps.local', 'cacheDuration', function () {
352+
isCacheExpired: computed('meta.timeStamps.local', 'cacheDuration', function () {
351353
const localTime = this.get('meta.timeStamps.local');
352354
const expiresTime = localTime + this.get('cacheDuration');
353355
return (localTime) ? Date.now() >= expiresTime : false;
@@ -366,7 +368,8 @@ Resource.reopenClass({
366368
367369
```
368370
model() {
369-
return this.container.lookupFactory('model:post').create({
371+
let owner = (typeof Ember.getOwner === 'function') ? Ember.getOwner(this) : this.container;
372+
return owner.lookup('model:post').create({
370373
attributes: {
371374
title: 'The JSON API 1.0 Spec Rocks!'
372375
}
@@ -399,14 +402,16 @@ Resource.reopenClass({
399402
let msg = (type) ? Ember.String.capitalize(type) : 'Resource';
400403
let factory = 'model:' + type;
401404
if (!type) {
402-
Ember.Logger.warn(msg + '#create called, instead you should first use ' + msg + '.extend({type:"entity"})');
405+
Logger.warn(msg + '#create called, instead you should first use ' + msg + '.extend({type:"entity"})');
403406
} else {
404-
if (instance.container) {
405-
useComputedPropsMetaToSetupRelationships(factory, instance);
407+
let owner = (typeof Ember.getOwner === 'function') ? Ember.getOwner(instance) : instance.container;
408+
if (owner) {
409+
useComputedPropsMetaToSetupRelationships(owner, factory, instance);
406410
} else {
407-
msg += '#create should only be called from a container lookup (relationships not setup) ';
408-
msg += 'use this.container.lookupFactory("' + factory + '").create() instead.';
409-
Ember.Logger.warn(msg);
411+
msg += '#create should only be called from a container lookup (relationships not setup), instead use: \n';
412+
msg += "`let owner = (typeof Ember.getOwner === 'function') ? Ember.getOwner(this) : this.container; \n";
413+
msg += 'owner.lookup("' + factory + '").create()`';
414+
Logger.warn(msg);
410415
}
411416
}
412417
return instance;
@@ -420,8 +425,8 @@ export { attr, hasOne, hasMany };
420425
let _rp = 'service type id attributes relationships links meta _attributes isNew cacheDuration isCacheExpired';
421426
const ignoredMetaProps = _rp.split(' ');
422427

423-
function useComputedPropsMetaToSetupRelationships(factory, instance) {
424-
factory = instance.container.lookupFactory(factory);
428+
function useComputedPropsMetaToSetupRelationships(owner, factory, instance) {
429+
factory = owner.lookup(factory);
425430
factory.eachComputedProperty(function(prop) {
426431
if (ignoredMetaProps.indexOf(prop) > -1) { return; }
427432
try {

addon/serializers/application.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,8 @@ export default Ember.Object.extend({
155155
if (!related) { return; }
156156
let resource, service;
157157
for (let i = 0; i < related.length; i++) {
158-
service = this.container.lookup('service:' + pluralize(related[i].type));
158+
let owner = (typeof Ember.getOwner === 'function') ? Ember.getOwner(this) : this.container;
159+
service = owner.lookup('service:' + pluralize(related[i].type));
159160
if (service && service.cache && service.cache.data) {
160161
resource = service.serializer.deserializeResource(related[i]);
161162
service.cacheResource({ meta: resp.meta, data: resource, headers: resp.headers});
@@ -238,7 +239,8 @@ export default Ember.Object.extend({
238239
@return {Function} factory for creating resource instances
239240
*/
240241
_lookupFactory(type) {
241-
return this.container.lookupFactory('model:' + singularize(type));
242+
let owner = (typeof Ember.getOwner === 'function') ? Ember.getOwner(this) : this.container;
243+
return owner.lookup('model:' + singularize(type));
242244
}
243245
});
244246

addon/utils/related-proxy.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ const RelatedProxyUtil = Ember.Object.extend({
8181
let relation = this.get('relationship');
8282
let type = this.get('type');
8383
let url = this.proxyUrl(resource, relation);
84-
let service = resource.container.lookup('service:' + pluralize(type));
84+
let owner = (typeof Ember.getOwner === 'function') ? Ember.getOwner(resource) : resource.container;
85+
let service = owner.lookup('service:' + pluralize(type));
8586
let promise = this.promiseFromCache(resource, relation, service);
8687
promise = promise || service.findRelated({'resource': relation, 'type': type}, url);
8788
let proxyProto = proxyFactory.extend(Ember.PromiseProxyMixin, {

app/initializers/model-setup.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default, initialize } from 'ember-jsonapi-resources/initializers/model-setup';

blueprints/jsonapi-initializer-test/files/tests/unit/initializers/__name__-test.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,12 @@ module('<%= friendlyTestName %>', {
2121
}
2222
});
2323

24-
test('it registers <%= resource %> factories: model, service, adapter, serializer; injects: service, serializer', function(assert) {
24+
test('it registers <%= resource %> factory: model, injects into: service, serializer', function(assert) {
2525
<%= classifiedModuleName %>Initializer.initialize(registry, application);
2626

2727
let registered = Ember.A(factories.mapBy('name'));
28-
assert.ok(registered.contains('model:<%= resource %>'), 'model:<%= resource %> registered');
29-
assert.ok(registered.contains('service:<%= resource %>'), 'service:<%= resource %> registered');
30-
assert.ok(registered.contains('adapter:<%= resource %>'), 'adapter:<%= resource %> registered');
31-
assert.ok(registered.contains('serializer:<%= resource %>'), 'serializer:<%= resource %> registered');
32-
let msg = 'briefs injected into service:store';
28+
assert.ok(registered.contains('model:<%= entity %>'), 'model:<%= entity %> registered');
29+
let msg = '<%= resource %> injected into service:store';
3330
assert.equal(injections.findBy('factory', 'service:store').property, '<%= resource %>', msg);
3431
msg = 'serializer injected into service:<%= resource %>';
3532
assert.equal(injections.findBy('factory', 'service:<%= resource %>').property, 'serializer', msg);

blueprints/jsonapi-initializer/files/__root__/initializers/__name__.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
import Resource from '<%= modelPath %>';
2+
13
export function initialize() {
24
// see http://emberjs.com/deprecations/v2.x/#toc_initializer-arity
35
let application = arguments[1] || arguments[0];
4-
6+
application.register('model:<%= entity %>', Resource, { instantiate: false, singleton: false });
57
application.inject('service:store', '<%= resource %>', 'service:<%= resource %>');
68
application.inject('service:<%= resource %>', 'serializer', 'serializer:<%= entity %>');
79
}
Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
11
import { moduleFor, test } from 'ember-qunit';
22
import Model from '<%= modelPath %>';
3+
import Ember from 'ember';
34

45
moduleFor('model:<%= dasherizedModuleName %>', '<%= friendlyDescription %>', {
56
// Specify the other units that are required for this test.
67
<%= typeof needs !== 'undefined' ? needs : '' %>
78
beforeEach() {
8-
const opts = { instantiate: false, singleton: false };
9-
Model.prototype.container = this.container;
10-
// Use a non-standard name, i.e. pluralized instead of singular
11-
this.registry.register('model:<%= resource %>', Model, opts);
9+
let opts = { instantiate: false, singleton: false };
10+
this.registry.register('model:<%= entity %>', Model, opts);
1211
},
1312
afterEach() {
14-
delete Model.prototype.container;
15-
this.registry.unregister('model:<%= resource %>');
13+
this.registry.unregister('model:<%= entity %>');
1614
}
1715
});
1816

1917
test('<%= resource %> has "type" property set to: <%= resource %>', function(assert) {
20-
var model = this.container.lookupFactory('model:<%= resource %>').create();
18+
let owner = (typeof Ember.getOwner === 'function') ? Ember.getOwner(this) : this.container;
19+
let model = owner.lookup('model:<%= entity %>').create();
2120
assert.equal(model.get('type'), '<%= resource %>', 'resource has expected type');
2221
});

blueprints/jsonapi-serializer-test/files/tests/unit/__path__/__test__.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
import { moduleFor, test } from 'ember-qunit';
22
import Resource from '<%= modelPath %>';
3+
import Ember from 'ember';
34

45
moduleFor('serializer:<%= entity %>', '<%= friendlyTestDescription %>', {
56
beforeEach() {
6-
Resource.prototype.container = this.container;
7+
if (typeof Ember.setOwner === 'function') {
8+
Ember.setOwner(Resource.prototype, Ember.getOwner(this));
9+
} else {
10+
Resource.prototype.container = this.container;
11+
}
712
let opts = { instantiate: false, singleton: false };
8-
this.registry.register('model:<%= resource %>', Resource, opts);
13+
this.registry.register('model:<%= entity %>', Resource, opts);
914
},
1015
afterEach() {
1116
delete Resource.prototype.container;
@@ -14,7 +19,8 @@ moduleFor('serializer:<%= entity %>', '<%= friendlyTestDescription %>', {
1419

1520
// Replace this with your real tests.
1621
test('it serializes resources', function(assert) {
17-
let resource = this.container.lookupFactory('model:<%= resource %>').create();
22+
let owner = (typeof Ember.getOwner === 'function') ? Ember.getOwner(this) : this.container;
23+
let resource = owner.lookup('model:<%= entity %>').create();
1824
let serializer = this.subject();
1925
var serializedResource = serializer.serialize(resource);
2026
assert.equal(serializedResource.data.type, '<%= resource %>', 'serializes a <%= entity %> resource');

0 commit comments

Comments
 (0)