From 96c8ccfcbccd77d88ff7e9edbd16bc6bd4185ebc Mon Sep 17 00:00:00 2001 From: Travis Hoover Date: Tue, 12 Dec 2017 15:53:28 -0800 Subject: [PATCH] Add initializer initialize arguments deprecation --- config/environment.js | 3 ++- index.js | 1 + tests/acceptance/arity-test.js | 10 ++++++++ tests/dummy/app/initializers/arity.js | 9 +++++++ vendor/initializer-arity.js | 36 +++++++++++++++++++++++++++ 5 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 tests/acceptance/arity-test.js create mode 100644 tests/dummy/app/initializers/arity.js create mode 100644 vendor/initializer-arity.js diff --git a/config/environment.js b/config/environment.js index d0d9c4d..c02e62c 100644 --- a/config/environment.js +++ b/config/environment.js @@ -14,7 +14,8 @@ module.exports = function(/* environment, appConfig */) { _ENABLE_RESOLVER_FUNCTION_SUPPORT: true, _ENABLE_DID_INIT_ATTRS_SUPPORT: true, _ENABLE_RENDER_SUPPORT: true, - _ENABLE_REVERSED_OBSERVER_SUPPORT: true + _ENABLE_REVERSED_OBSERVER_SUPPORT: true, + _ENABLE_INITIALIZER_ARGUMENTS_SUPPORT: true } }; }; diff --git a/index.js b/index.js index c7b308b..e4488f0 100644 --- a/index.js +++ b/index.js @@ -12,5 +12,6 @@ module.exports = { this.import('vendor/enumerable-contains.js'); this.import('vendor/underscore-actions.js'); this.import('vendor/reversed-observer.js'); + this.import('vendor/initializer-arity.js'); } }; diff --git a/tests/acceptance/arity-test.js b/tests/acceptance/arity-test.js new file mode 100644 index 0000000..ccd5be9 --- /dev/null +++ b/tests/acceptance/arity-test.js @@ -0,0 +1,10 @@ +import { test } from 'qunit'; +import moduleForAcceptance from '../../tests/helpers/module-for-acceptance'; + +moduleForAcceptance('Acceptance | Initializer Initialize is deprecated for 2 arguments'); + +test('that a deprecation is thrown when 2 arguments are present in the initializers initalize method', function(assert) { + assert.expectDeprecation('The `initialize` method for Application initializer \'arity\' should take only one argument - `App`, an instance of an `Application`'); + + visit('/'); +}); diff --git a/tests/dummy/app/initializers/arity.js b/tests/dummy/app/initializers/arity.js new file mode 100644 index 0000000..ca18fdb --- /dev/null +++ b/tests/dummy/app/initializers/arity.js @@ -0,0 +1,9 @@ +//eslint-disable-next-line no-unused-vars +export function initialize(container, application) { + // this is left blank +} + +export default { + name: 'arity', + initialize: initialize +} diff --git a/vendor/initializer-arity.js b/vendor/initializer-arity.js new file mode 100644 index 0000000..f58e4e9 --- /dev/null +++ b/vendor/initializer-arity.js @@ -0,0 +1,36 @@ +(function() { + var _Ember; + if (typeof Ember !== 'undefined') { + _Ember = Ember; + } else { + _Ember = require('ember').default; + } + + if (EmberENV && EmberENV._ENABLE_INITIALIZER_ARGUMENTS_SUPPORT !== true) { + return false; + } + + _Ember.Engine.reopen({ + /** + @private + @method runInitializers + */ + runInitializers() { + this._runInitializer('initializers', (name, initializer) => { + _Ember.assert(`No application initializer named '${name}'`, !!initializer); + if (initializer.initialize.length === 2) { + _Ember.deprecate(`The \`initialize\` method for Application initializer '${name}' should take only one argument - \`App\`, an instance of an \`Application\`.`, + false, { + id: 'ember-application.app-initializer-initialize-arguments', + until: '3.0.0', + url: 'https://emberjs.com/deprecations/v2.x/#toc_initializer-arity' + }); + + initializer.initialize(this.__registry__, this); + } else { + initializer.initialize(this); + } + }); + } + }) +})();