Skip to content
This repository has been archived by the owner on Aug 3, 2020. It is now read-only.

Commit

Permalink
setOwner sets the container in Ember 1
Browse files Browse the repository at this point in the history
  • Loading branch information
Martin Muñoz committed May 15, 2020
1 parent c5e30b6 commit 699f9a2
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 6 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
"dependencies": {
"ember-cli-babel": "^7.19.0",
"ember-cli-version-checker": "^2.1.0",
"ember-compatibility-helpers": "^1.2.1",
"ember-factory-for-polyfill": "^1.3.1"
},
"devDependencies": {
Expand Down
61 changes: 58 additions & 3 deletions tests/unit/setowner-test.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
import Ember from 'ember';
import { module, test } from 'ember-qunit';
const { getOwner, setOwner } = Ember;
import EmberObject from '@ember/object';
import { getOwner, setOwner } from '@ember/application';
import { inject as service } from '@ember/service';
import { moduleFor, test } from 'ember-qunit';
import { lte } from 'ember-compatibility-helpers'

module('setOwner');
moduleFor('foo:bar', {
afterEach(assert) {
assert.noDeprecationsOccurred();
}
});

test('setOwner works with getOwner', function(assert) {
let object = {};
Expand All @@ -14,3 +21,51 @@ test('setOwner works with getOwner', function(assert) {

assert.strictEqual(getOwner(object), owner, 'the owner is set correctly');
});

if (lte('1.13.13')) {
test('[Ember 1.x]: setOwner sets the container if the owner has a container', function(assert) {
this.register('service:session', Ember.Object);

let Foo = EmberObject.extend({
session: service()
});

let foo = Foo.create();

setOwner(foo, getOwner(this));

assert.ok(!!foo.get('session'), 'session injection exists');
});

test('[Ember 1.x]: setOwner does not crash if the owner does not have a container', function(assert) {
this.register('service:session', Ember.Object);

let Foo = EmberObject.extend({
session: service()
});

let owner = {};
let foo = Foo.create();

setOwner(foo, owner);

assert.throws(() => {
foo.get('session');
}, /Attempting to lookup an injected property on an object without a container/)
});

test('[Ember 1.x]: setOwner does not clobbering an existing container', function(assert) {
this.register('service:session', Ember.Object);

let Foo = EmberObject.extend({
session: service()
});

let container = {};
let foo = Foo.create({ container });

setOwner(foo, getOwner(this));

assert.strictEqual(foo.container, container, 'container is not clobbered');
});
}
13 changes: 11 additions & 2 deletions vendor/install-getowner-polyfill.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import Ember from 'ember';
import { lte } from 'ember-compatibility-helpers'

(function() {
let OWNER;
let OWNER, CONTAINER;

if (!Ember.getOwner || !Ember.setOwner) {
OWNER = '__' + (Date.now()) + '_owner';
CONTAINER = '__' + (Date.now()) + '_container';
}

if (!Ember.getOwner) {
let CONTAINER = '__' + (Date.now()) + '_container';
let REGISTRY = '__' + (Date.now()) + '_registry';
let SAFE_LOOKUP_FACTORY_METHOD = '__' + (Date.now()) + '_lookupFactory';

Expand Down Expand Up @@ -177,6 +178,14 @@ import Ember from 'ember';
if (!Ember.setOwner) {
function setOwner(object, owner) {
object[OWNER] = owner;

if (lte('1.13.13')) {
if (object.container) { return; }

if (owner[CONTAINER]) {
object.container = owner[CONTAINER];
}
}
}

Object.defineProperty(Ember, 'setOwner', {
Expand Down
2 changes: 1 addition & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5285,7 +5285,7 @@ ember-cli@~3.18.0:
watch-detector "^1.0.0"
yam "^1.0.0"

ember-compatibility-helpers@^1.1.2:
ember-compatibility-helpers@^1.1.2, ember-compatibility-helpers@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.1.tgz#87c92c4303f990ff455c28ca39fb3ee11441aa16"
integrity sha512-6wzYvnhg1ihQUT5yGqnLtleq3Nv5KNv79WhrEuNU9SwR4uIxCO+KpyC7r3d5VI0EM7/Nmv9Nd0yTkzmTMdVG1A==
Expand Down

0 comments on commit 699f9a2

Please sign in to comment.