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

Commit

Permalink
Merge pull request #14 from emberjs/generated-controllers
Browse files Browse the repository at this point in the history
Fix generated controllers to use proxying controllers
  • Loading branch information
mmun committed May 29, 2020
2 parents ec85c78 + 4205a03 commit 13a040d
Show file tree
Hide file tree
Showing 11 changed files with 99 additions and 25 deletions.
36 changes: 17 additions & 19 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,20 @@ module.exports = {

if (!this.shouldInclude) { return; }

// grab the original _findHost, before ember-engines can muck with it
let proto = Object.getPrototypeOf(this);
let host = proto._findHost.call(this);

// using `app.import` here because we need to ensure this ends up in the
// top level vendor.js (not engine-vendor.js as would happen with
// this.import inside an engine)
host.import('vendor/patch-generate-controller/index.js');

let config = this.project.config(process.env.EMBER_ENV);

this.hasLegacyViewSupport = config.EmberENV._ENABLE_LEGACY_VIEW_SUPPORT;

if (this.hasLegacyViewSupport) {
// grab the original _findHost, before ember-engines can muck with it
let proto = Object.getPrototypeOf(this);
let host = proto._findHost.call(this);

// using `app.import` here because we need to ensure this ends up in the
// top level vendor.js (not engine-vendor.js as would happen with
// this.import inside an engine)
host.import('vendor/legacy-each-view-item-controller-support/index.js');
}
},
Expand All @@ -42,20 +44,16 @@ module.exports = {
},

treeForVendor(rawVendorTree) {
if (!this.shouldInclude) { return; }
let babelAddon = this.addons.find(addon => addon.name === 'ember-cli-babel');

if (this.hasLegacyViewSupport) {
let babelAddon = this.addons.find(addon => addon.name === 'ember-cli-babel');

let transpiledVendorTree = babelAddon.transpileTree(rawVendorTree, {
babel: this.options.babel,
let transpiledVendorTree = babelAddon.transpileTree(rawVendorTree, {
babel: this.options.babel,

'ember-cli-babel': {
compileModules: false,
},
});
'ember-cli-babel': {
compileModules: false,
},
});

return transpiledVendorTree;
}
return transpiledVendorTree;
},
};
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
"ember-cli-uglify": "^3.0.0",
"ember-disable-prototype-extensions": "^1.1.3",
"ember-export-application-global": "^2.0.1",
"ember-legacy-views": "^0.2.0",
"ember-load-initializers": "^2.1.1",
"ember-maybe-import-regenerator": "^0.1.6",
"ember-qunit": "^4.6.0",
Expand Down
17 changes: 17 additions & 0 deletions tests/acceptance/generated-controller-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { module, test } from 'qunit';
import { setupApplicationTest } from 'ember-qunit';
import { visit } from '@ember/test-helpers';

module('Generated controllers', function(hooks) {
setupApplicationTest(hooks);

test('object controllers are generated correctly', async function(assert) {
await visit('/generated-object-controller-test');
assert.dom('[data-test-target]').hasText('Alice');
});

test('array controllers are generated correctly', async function(assert) {
await visit('/generated-array-controller-test');
assert.dom('[data-test-target]').hasText('Alice');
});
});
2 changes: 2 additions & 0 deletions tests/dummy/app/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ var Router = Ember.Router.extend({
});

Router.map(function() {
this.route('generated-object-controller-test');
this.route('generated-array-controller-test');
});

export default Router;
Empty file removed tests/dummy/app/routes/.gitkeep
Empty file.
8 changes: 8 additions & 0 deletions tests/dummy/app/routes/generated-array-controller-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import Route from '@ember/routing/route';
import { A } from '@ember/array';

export default Route.extend({
model() {
return A([{ name: 'Alice' }]);
}
});
7 changes: 7 additions & 0 deletions tests/dummy/app/routes/generated-object-controller-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import Route from '@ember/routing/route';

export default Route.extend({
model() {
return { name: 'Alice' };
}
});
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div data-test-target>{{firstObject.name}}</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div data-test-target>{{name}}</div>
46 changes: 46 additions & 0 deletions vendor/patch-generate-controller/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import Ember from 'ember';
import { get } from '@ember/object';

function generateControllerFactory(owner, controllerName, context) {
let controllerType;

if (context && Array.isArray(context)) {
controllerType = 'array';
} else if (context) {
controllerType = 'object';
} else {
controllerType = 'basic';
}

let factoryName = `controller:${controllerType}`;

let Factory = owner._lookupFactory(factoryName).extend({
isGenerated: true,
toString() {
return `(generated ${controllerName} controller)`;
}
});

let fullName = `controller:${controllerName}`;

owner.register(fullName, Factory);

return Factory;
}

function generateController(owner, controllerName, context) {
generateControllerFactory(owner, controllerName, context);
let fullName = `controller:${controllerName}`;
let instance = owner.lookup(fullName);

if (get(instance, 'namespace.LOG_ACTIVE_GENERATION')) {
Ember.Logger.info(`generated -> ${fullName}`, { fullName: fullName });
}

return instance;
}

// Patch Ember's internal modules
let generateControllerModule = Ember.__loader.require('ember-routing/system/generate_controller');
generateControllerModule.generateControllerFactory = generateControllerFactory;
generateControllerModule.default = generateController;
5 changes: 0 additions & 5 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2234,11 +2234,6 @@ bower-endpoint-parser@0.2.2:
resolved "https://registry.yarnpkg.com/bower-endpoint-parser/-/bower-endpoint-parser-0.2.2.tgz#00b565adbfab6f2d35addde977e97962acbcb3f6"
integrity sha1-ALVlrb+rby01rd3pd+l5Yqy8s/Y=

bower@^1.8.2:
version "1.8.8"
resolved "https://registry.yarnpkg.com/bower/-/bower-1.8.8.tgz#82544be34a33aeae7efb8bdf9905247b2cffa985"
integrity sha512-1SrJnXnkP9soITHptSO+ahx3QKp3cVzn8poI6ujqc5SeOkg5iqM1pK9H+DSc2OQ8SnO0jC/NG4Ur/UIwy7574A==

boxen@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64"
Expand Down

0 comments on commit 13a040d

Please sign in to comment.