ember-watson
A young Ember Doctor.
Getting Started
ember-watson
can be used as an Ember CLI addon, it will extend the
available list of commands.
To install, run ember install ember-watson
and you are good
to go.
Commands
Prototype Extensions
ember watson:convert-prototype-extensions
Convert computed properties and observers to not use prototype
extensions. You can specify appPath
(defaults to app/
) in case you
want to convert code somewhere different to app/
.
For more info about this please refer to the following PR Encourage decorator-style Ember.computed/Ember.observer
Resource Router Mapping
ember watson:convert-resource-router-mapping <routerPath>
Converts this.resource('user')
to this.route('user', {resetNamespace: true })
in app/router.js
.
Helps with the deprecation added in ember.js/11517.
Methodify (ES2015)
ember watson:methodify <path>
Converts methods in file to ES6 method syntax.
Find Overloaded CPS
ember watson:find-overloaded-cps <path>
Helps you locate all the places where your source may trigger the "Using the same function as getter and setter" deprecation.
Replace Needs with Injection
ember watson:replace-needs-with-injection <path>
Convert needs
declarations the individual properties using
the new Ember.inject.controller()
feature. Also convert any uses
of the controllers
hash to use the newly defined properties.
Remove usages of Ember.K
ember watson:remove-ember-k <mode>
Replaces all usages of Ember.K
with just plain functions.
The <mode>
argument is mandatory and can be --empty
or --return-this
.
Invoked with --empty
it will replace Ember.K
with an empty function, which is more idiomatic JS.
Invoked with --return-empty
it will replace it by a function that returns this
so allows chaining.
This command runs automatically in all folders that might contain ember code, so no <path>
or --dry-run
options are available.
Tests: Upgrade QUnit Tests
ember watson:upgrade-qunit-tests
This command will traverse your tests directory fixing your QUnit test to use the 2.0 compatible output (see ember-cli#3197).
The following are some of the changes:
- Add
import { module, test } from 'qunit'
if ember-qunit is not used. You need to use ember-cli-qunit-v0.3.8 which includes QUnit's shims. See ember-cli#3245 - Import
skip
if used in tests:import { module,test, skip } from 'qunit'
- Add assert to callback function in
test
. - Use
assert
inside test, e.g.ok
becomesassert.ok
. - Use
beforeEach
andafterEach
instead ofsetup
andteardown
inside module.
Tests: Use Destroy App Helper
ember watson:use-destroy-app-helper <path>
Convert (qunit or mocha flavored) acceptance tests to utilize the destroyApp
helper introduced in
Ember CLI 1.13.9.
andThen
style async tests to async/await
Tests: Convert ember watson:convert-tests-to-async-await <path>
Convert (qunit or mocha flavored) acceptance tests to utilize async/await
// before:
it('can visit subroutes', function(done) {
visit('/');
andThen(function() {
expect(find('h2').text()).to.be.empty;
});
visit('/foo');
andThen(function() {
expect(find('h2').text()).to.be.equal('this is an acceptance test');
done();
});
});
// after:
it('can visit subroutes', async function() {
await visit('/');
expect(find('h2').text()).to.be.empty;
await visit('/foo');
expect(find('h2').text()).to.be.equal('this is an acceptance test');
});
Ember Data: Async Relationships Default
ember watson:convert-ember-data-async-false-relationships
In Ember Data 2.0 relationships will be asynchronous by default. Sync relationships will still be supported but you will need to manually opt into them by setting { async: false } on your relationships. This task adds an explicit async: false
options to all belongsTo
and hasMany
that
either have no options or its options does not contain an explicit async value.
For more information, read ember-data 1.13 release notes
Ember Data: Model Lookups
ember watson:convert-ember-data-model-lookups
This changes the way model lookups happen when working with Ember
Data. When using hasMany
or belongsTo
, the first argument will
become a dasherized string. Here's some examples:
// before, using a camelCase string
export default DS.Model.extend({
postComments: DS.hasMany('postComment', {async: true})
});
// after
export default DS.Model.extend({
postComments: DS.hasMany('post-comment', {async: true})
});
// before, using a variable or looking up on App.
export default DS.Model.extend({
postComments: DS.hasMany(PostComment, {async: true})
});
// after
export default DS.Model.extend({
postComments: DS.hasMany('post-comment', {async: true})
});
Ember Data: Remove isNewSerializerAPI
ember watson:remove-ember-data-is-new-serializer-api
Removes isNewSerializerAPI
literals in your serializer code.
You should use this after you make sure all your serializers are
compatible with the new serializer API in 1.13. You can find more
information on how to upgrade serializers
here.
// before
export default DS.RESTSerializer.extend({
isNewSerializerAPI: true
});
// after
export default DS.RESTSerializer.extend({});
Specifying a file or path
You can run any of the commands passing as argument the path, file or regular expression of the files that you want to transform.
ember watson:upgrade-qunit-tests tests/unit*
ember watson:upgrade-qunit-tests tests/unit/model-test.js
ember watson:upgrade-qunit-tests tests
The same is possible with ember watson:convert-prototype-extensions
and ember watson:convert-ember-data-model-lookups
.
Using without Ember CLI
ember-watson
can be used without Ember CLI too, just do npm install -g ember-watson
.
Then you can use the commands from above, just with the altered syntax.
ember watson:upgrade-qunit-tests
becomes ember-watson upgrade-qunit-tests
For additional help use ember-watson -h
.
License
ember-watson is MIT Licensed.