Skip to content

Commit

Permalink
[BUGFIX] Octane: should not need to use get with model.id (#6829)
Browse files Browse the repository at this point in the history
  • Loading branch information
Gaurav0 authored and runspired committed Dec 2, 2019
1 parent 4c71e3c commit a0158de
Show file tree
Hide file tree
Showing 10 changed files with 209 additions and 14 deletions.
6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,10 @@
"test-external:ember-data-relationship-tracker": "./bin/test-external-partner-project.js ember-data-relationship-tracker https://github.com/ef4/ember-data-relationship-tracker.git"
},
"devDependencies": {
"zlib": "1.0.5",
"@babel/plugin-transform-typescript": "^7.7.4",
"@ember/edition-utils": "^1.1.1",
"@ember/optional-features": "^1.1.0",
"@glimmer/component": "^1.0.0-beta.3",
"@tracerbench/core": "3.0.7",
"@types/ember": "^3.1.1",
"@types/ember-qunit": "^3.4.7",
Expand Down Expand Up @@ -131,7 +132,8 @@
"semver": "^6.2.0",
"silent-error": "^1.1.1",
"typescript": "~3.7.2",
"url": "^0.11.0"
"url": "^0.11.0",
"zlib": "1.0.5"
},
"bin": {
"test-partner-project": "./bin/test-external-partner-project.js",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
{
const { setEdition } = require('@ember/edition-utils');

setEdition('octane');

module.exports = {
/**
Ember CLI sends analytics information by default. The data is completely
anonymous, but there are times when you might want to disable this behavior.
Setting `disableAnalytics` to true will prevent any data from being sent.
*/
"disableAnalytics": false
}
disableAnalytics: false,
};
5 changes: 4 additions & 1 deletion packages/-ember-data/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
"@ember-data/record-data": "3.16.0-alpha.2",
"@ember-data/serializer": "3.16.0-alpha.2",
"@ember-data/store": "3.16.0-alpha.2",
"@ember/edition-utils": "^1.1.1",
"@ember/ordered-set": "^2.0.3",
"@glimmer/env": "^0.1.7",
"broccoli-merge-trees": "^3.0.2",
Expand All @@ -38,8 +39,9 @@
},
"devDependencies": {
"@babel/plugin-transform-typescript": "^7.7.4",
"@ember/optional-features": "^1.1.0",
"@ember-data/unpublished-test-infra": "3.16.0-alpha.2",
"@ember/optional-features": "^1.1.0",
"@glimmer/component": "^1.0.0-beta.3",
"@types/ember": "^3.1.1",
"@types/ember-qunit": "^3.4.7",
"@types/ember-test-helpers": "~1.0.6",
Expand Down Expand Up @@ -81,6 +83,7 @@
"json-typescript": "^1.1.0",
"loader.js": "^4.7.0",
"qunit": "^2.9.3",
"qunit-dom": "^0.9.2",
"typescript": "~3.7.2"
},
"engines": {
Expand Down
99 changes: 99 additions & 0 deletions packages/-ember-data/tests/acceptance/tracking-model-id-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import { render, settled } from '@ember/test-helpers';
import hbs from 'htmlbars-inline-precompile';
import Store from '@ember-data/store';
import Model, { attr } from '@ember-data/model';
import JSONAPIAdapter from '@ember-data/adapter/json-api';
import JSONAPISerializer from '@ember-data/serializer/json-api';
import Component from '@glimmer/component';
import { gte } from 'ember-compatibility-helpers';
import { has } from 'require';
import { resolve } from 'rsvp';

if (gte('3.13.0') && has('@glimmer/component')) {
class Widget extends Model {
@attr() name;

get numericId() {
return Number(this.id);
}
}

class WidgetList extends Component {
get sortedWidgets() {
let { widgets } = this.args;

return widgets.slice().sort((a, b) => b.numericId - a.numericId);
}
}

let layout = hbs`
<ul>
{{#each this.sortedWidgets as |widget index|}}
<li class="widget{{index}}">
<div class="id">ID: {{widget.id}}</div>
<div class="numeric-id">Numeric ID: {{widget.numericId}}</div>
<div class="name">Name: {{widget.name}}</div>
<br/>
</li>
{{/each}}
</ul>
`;

class TestAdapter extends JSONAPIAdapter {
createRecord() {
return resolve({
data: {
id: '4',
type: 'widget',
attributes: {
name: 'Contraption',
},
},
});
}
}

module('acceptance/tracking-model-id - tracking model id', function(hooks) {
setupRenderingTest(hooks);

hooks.beforeEach(function() {
let { owner } = this;
owner.register('service:store', Store);
owner.register('model:widget', Widget);
owner.register('component:widget-list', WidgetList);
owner.register('template:components/widget-list', layout);
owner.register('adapter:application', TestAdapter);
owner.register('serializer:application', JSONAPISerializer);
});

test("can track model id's without using get", async function(assert) {
let store = this.owner.lookup('service:store');
store.createRecord('widget', { id: '1', name: 'Doodad' });
store.createRecord('widget', { id: '3', name: 'Gizmo' });
store.createRecord('widget', { id: '2', name: 'Gadget' });
this.widgets = store.peekAll('widget');

await render(hbs`
<WidgetList @widgets={{this.widgets}} />
`);
await settled();

assert.dom('ul>li+li+li').exists;
assert.dom('ul>li.widget0>div.name').containsText('Gizmo');
assert.dom('ul>li.widget1>div.name').containsText('Gadget');
assert.dom('ul>li.widget2>div.name').containsText('Doodad');

let contraption = store.createRecord('widget', { name: 'Contraption' });
await contraption.save();
await settled();

assert.dom('ul>li+li+li+li').exists;
assert.dom('ul>li.widget0>div.name').containsText('Contraption');
assert.dom('ul>li.widget1>div.name').containsText('Gizmo');
assert.dom('ul>li.widget2>div.name').containsText('Gadget');
assert.dom('ul>li.widget3>div.name').containsText('Doodad');
});
});
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
{
"template-only-glimmer-components": true,
"application-template-wrapper": false,
"jquery-integration": false
}
8 changes: 7 additions & 1 deletion packages/model/addon/-private/model.js
Original file line number Diff line number Diff line change
Expand Up @@ -1340,7 +1340,13 @@ const ID_DESCRIPTOR = {
// the _internalModel guard exists, because some dev-only deprecation code
// (addListener via validatePropertyInjections) invokes toString before the
// object is real.
return this._internalModel && this._internalModel.id;
if (DEBUG) {
if (!this._internalModel) {
return;
}
}
get(this._internalModel, '_tag');
return this._internalModel.id;
},
};

Expand Down
4 changes: 3 additions & 1 deletion packages/store/addon/-private/system/model/internal-model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import Snapshot from '../snapshot';
import Store from '../ds-model-store';
import { errorsHashToArray } from '../errors-utils';
import RecordArray from '../record-arrays/record-array';
// import { PromiseArray } from '../promise-proxies';

import { RecordReference, BelongsToReference, HasManyReference } from '../references';
import { RecordData } from '../../ts-interfaces/record-data';
Expand Down Expand Up @@ -136,6 +135,7 @@ function extractPivotName(name) {
*/
export default class InternalModel {
_id: string | null;
_tag: number = 0;
modelName: string;
clientId: string;
__recordData: RecordData | null;
Expand Down Expand Up @@ -216,6 +216,7 @@ export default class InternalModel {
if (value !== this._id) {
let newIdentifier = { type: this.identifier.type, lid: this.identifier.lid, id: value };
identifierCacheFor(this.store).updateRecordIdentifier(this.identifier, newIdentifier);
set(this, '_tag', this._tag + 1);
// TODO Show deprecation for private api
}
} else if (!IDENTIFIERS) {
Expand Down Expand Up @@ -1378,6 +1379,7 @@ export default class InternalModel {
let didChange = id !== this._id;

this._id = id;
set(this, '_tag', this._tag + 1);

if (didChange && id !== null) {
this.store.setRecordId(this.modelName, id, this.clientId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"ember-cli-app-version": "^3.2.0",
"ember-cli-babel": "^7.13.0",
"ember-cli-dependency-checker": "^3.2.0",
"ember-cli-htmlbars": "^4.0.6",
"ember-cli-htmlbars": "^4.0.8",
"ember-cli-inject-live-reload": "^2.0.2",
"ember-cli-template-lint": "^1.0.0-beta.1",
"ember-export-application-global": "^2.0.1",
Expand Down
4 changes: 2 additions & 2 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@
"@ember-data/canary-features/*": ["packages/canary-features/addon/*"],
"@ember-data/private-build-infra": ["packages/private-build-infra/addon"],
"@ember-data/private-build-infra/*": ["packages/private-build-infra/addon/*"],
"@ember-data/unpublished-test-infra/test-support": ["packages//unpublished-test-infra/addon-test-support"],
"@ember-data/unpublished-test-infra/test-support/*": ["packages//unpublished-test-infra/addon-test-support/*"],
"@ember-data/unpublished-test-infra/test-support": ["packages/unpublished-test-infra/addon-test-support"],
"@ember-data/unpublished-test-infra/test-support/*": ["packages/unpublished-test-infra/addon-test-support/*"],
"fastboot-test-app/tests/*": ["tests/*"],
"fastboot-test-app/*": ["app/*"],
"*": ["packages/store/types/*", "packages/record-data/types/*", "packages/fastboot-test-app/types/*"]
Expand Down
83 changes: 80 additions & 3 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
"@babel/traverse" "^7.4.4"
"@babel/types" "^7.4.4"

"@babel/helper-create-class-features-plugin@^7.7.0", "@babel/helper-create-class-features-plugin@^7.7.4":
"@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.7.0", "@babel/helper-create-class-features-plugin@^7.7.4":
version "7.7.4"
resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d"
integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA==
Expand Down Expand Up @@ -832,6 +832,15 @@
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-typescript" "^7.2.0"

"@babel/plugin-transform-typescript@~7.5.0":
version "7.5.5"
resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz#6d862766f09b2da1cb1f7d505fe2aedab6b7d4b8"
integrity sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w==
dependencies:
"@babel/helper-create-class-features-plugin" "^7.5.5"
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-typescript" "^7.2.0"

"@babel/plugin-transform-unicode-regex@^7.7.0":
version "7.7.0"
resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.0.tgz#743d9bcc44080e3cc7d49259a066efa30f9187a3"
Expand Down Expand Up @@ -1199,6 +1208,30 @@
"@glimmer/util" "^0.42.2"
"@glimmer/wire-format" "^0.42.2"

"@glimmer/component@^1.0.0-beta.3":
version "1.0.0-beta.3"
resolved "https://registry.npmjs.org/@glimmer/component/-/component-1.0.0-beta.3.tgz#bc466f4da776cb74bc8c6c836d6aa658f2161bee"
integrity sha512-I/NTVE8Nz0gjvAlO9mAdP0+XumRj65zqh0+J2jBDxAQHJTw9R55MTx4nvkbQteh6+sWPixFzgtt/oLzy8L9sxQ==
dependencies:
"@glimmer/di" "^0.1.9"
"@glimmer/env" "^0.1.7"
"@glimmer/util" "^0.44.0"
broccoli-file-creator "^2.1.1"
broccoli-merge-trees "^3.0.2"
ember-cli-babel "^7.7.3"
ember-cli-get-component-path-option "^1.0.0"
ember-cli-is-package-missing "^1.0.0"
ember-cli-normalize-entity-name "^1.0.0"
ember-cli-path-utils "^1.0.0"
ember-cli-string-utils "^1.1.0"
ember-cli-typescript "3.0.0"
ember-compatibility-helpers "^1.1.2"

"@glimmer/di@^0.1.9":
version "0.1.11"
resolved "https://registry.npmjs.org/@glimmer/di/-/di-0.1.11.tgz#a6878c07a13a2c2c76fcde598a5c97637bfc4280"
integrity sha1-poeMB6E6LCx2/N5ZilyXY3v8QoA=

"@glimmer/di@^0.2.0":
version "0.2.1"
resolved "https://registry.npmjs.org/@glimmer/di/-/di-0.2.1.tgz#5286b6b32040232b751138f6d006130c728d4b3d"
Expand Down Expand Up @@ -1236,6 +1269,11 @@
resolved "https://registry.npmjs.org/@glimmer/util/-/util-0.42.2.tgz#9ca1631e42766ea6059f4b49d0bdfb6095aad2c4"
integrity sha512-Heck0baFSaWDanCYtmOcLeaz7v+rSqI8ovS7twrp2/FWEteb3Ze5sWQ2BEuSAG23L/k/lzVwYM/MY7ZugxBpaA==

"@glimmer/util@^0.44.0":
version "0.44.0"
resolved "https://registry.npmjs.org/@glimmer/util/-/util-0.44.0.tgz#45df98d73812440206ae7bda87cfe04aaae21ed9"
integrity sha512-duAsm30uVK9jSysElCbLyU6QQYO2X9iLDLBIBUcCqck9qN1o3tK2qWiHbGK5d6g8E2AJ4H88UrfElkyaJlGrwg==

"@glimmer/wire-format@^0.42.2":
version "0.42.2"
resolved "https://registry.npmjs.org/@glimmer/wire-format/-/wire-format-0.42.2.tgz#b95062b594dddeb8bd11cba3a6a0accbfabc9930"
Expand Down Expand Up @@ -6334,7 +6372,7 @@ ember-cli-htmlbars-inline-precompile@^2.1.0:
heimdalljs-logger "^0.1.9"
silent-error "^1.1.0"

ember-cli-htmlbars@^4.0.0, ember-cli-htmlbars@^4.0.6, ember-cli-htmlbars@^4.0.8:
ember-cli-htmlbars@^4.0.0, ember-cli-htmlbars@^4.0.8:
version "4.0.8"
resolved "https://registry.npmjs.org/ember-cli-htmlbars/-/ember-cli-htmlbars-4.0.8.tgz#e87b62e7040bd478a2d007053bdb1644dd1685b0"
integrity sha512-B6fzlqmv2E2dl8P6UIYu3bY8nZU2kKfl1VkEIgxFAINfsu9fP65kX/bKzHqGhHF8nAtWBoXZWw6tomHKfUT/Jg==
Expand Down Expand Up @@ -6503,6 +6541,23 @@ ember-cli-typescript-blueprints@^3.0.0:
inflection "^1.12.0"
silent-error "^1.1.0"

ember-cli-typescript@3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/ember-cli-typescript/-/ember-cli-typescript-3.0.0.tgz#3b838d1ce9e4d22a98e68da22ceac6dc0cfd9bfc"
integrity sha512-lo5YArbJzJi5ssvaGqTt6+FnhTALnSvYVuxM7lfyL1UCMudyNJ94ovH5C7n5il7ATd6WsNiAPRUO/v+s5Jq/aA==
dependencies:
"@babel/plugin-transform-typescript" "~7.5.0"
ansi-to-html "^0.6.6"
debug "^4.0.0"
ember-cli-babel-plugin-helpers "^1.0.0"
execa "^2.0.0"
fs-extra "^8.0.0"
resolve "^1.5.0"
rsvp "^4.8.1"
semver "^6.0.0"
stagehand "^1.0.0"
walk-sync "^2.0.0"

ember-cli-typescript@^2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/ember-cli-typescript/-/ember-cli-typescript-2.0.2.tgz#464984131fbdc05655eb61d1c3cdd911d3137f0d"
Expand Down Expand Up @@ -6680,7 +6735,7 @@ ember-cli@~3.14.0:
watch-detector "^1.0.0"
yam "^1.0.0"

ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.2.0:
ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2, ember-compatibility-helpers@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.0.tgz#feee16c5e9ef1b1f1e53903b241740ad4b01097e"
integrity sha512-pUW4MzJdcaQtwGsErYmitFRs0rlCYBAnunVzlFFUBr4xhjlCjgHJo0b53gFnhTgenNM3d3/NqLarzRhDTjXRTg==
Expand Down Expand Up @@ -7320,6 +7375,21 @@ execa@^1.0.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"

execa@^2.0.0:
version "2.1.0"
resolved "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99"
integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==
dependencies:
cross-spawn "^7.0.0"
get-stream "^5.0.0"
is-stream "^2.0.0"
merge-stream "^2.0.0"
npm-run-path "^3.0.0"
onetime "^5.1.0"
p-finally "^2.0.0"
signal-exit "^3.0.2"
strip-final-newline "^2.0.0"

execa@^3.0.0, execa@^3.1.0, execa@^3.4.0:
version "3.4.0"
resolved "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89"
Expand Down Expand Up @@ -10825,6 +10895,13 @@ npm-run-path@^2.0.0:
dependencies:
path-key "^2.0.0"

npm-run-path@^3.0.0:
version "3.1.0"
resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5"
integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==
dependencies:
path-key "^3.0.0"

npm-run-path@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.0.tgz#d644ec1bd0569187d2a52909971023a0a58e8438"
Expand Down

0 comments on commit a0158de

Please sign in to comment.