From a2bd7dbb2b95a7f18bfaab6bbd9e305a29d7ef9a Mon Sep 17 00:00:00 2001 From: Balint Erdi Date: Thu, 7 Apr 2016 20:41:54 +0200 Subject: [PATCH] Use property lookup in applyTransforms A property lookup is used to speed up the hot path of applying transforms when normalizing data received from the server. --- addon/serializers/json.js | 2 +- tests/unit/model-test.js | 11 ++--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/addon/serializers/json.js b/addon/serializers/json.js index 37fdf3da119..4a54f26c21d 100644 --- a/addon/serializers/json.js +++ b/addon/serializers/json.js @@ -193,7 +193,7 @@ export default Serializer.extend({ } typeClass.eachTransformedAttribute((key, typeClass) => { - if (!(key in data)) { return; } + if (data[key] === undefined) { return; } var transform = this.transformFor(typeClass); if (isEnabled('ds-transform-pass-options')) { diff --git a/tests/unit/model-test.js b/tests/unit/model-test.js index c476e39718a..1e838600742 100644 --- a/tests/unit/model-test.js +++ b/tests/unit/model-test.js @@ -906,18 +906,16 @@ AssertionPrototype.convertsWhenSet = function(type, provided, expected) { }; test("a DS.Model can describe String attributes", function(assert) { - assert.expect(6); + assert.expect(4); assert.converts('string', "Scumbag Tom", "Scumbag Tom"); assert.converts('string', 1, "1"); assert.converts('string', "", ""); assert.converts('string', null, null); - assert.converts('string', undefined, null); - assert.convertsFromServer('string', undefined, null); }); test("a DS.Model can describe Number attributes", function(assert) { - assert.expect(9); + assert.expect(8); assert.converts('number', "1", 1); assert.converts('number', "0", 0); @@ -925,7 +923,6 @@ test("a DS.Model can describe Number attributes", function(assert) { assert.converts('number', 0, 0); assert.converts('number', "", null); assert.converts('number', null, null); - assert.converts('number', undefined, null); assert.converts('number', true, 1); assert.converts('number', false, 0); }); @@ -938,18 +935,14 @@ test("a DS.Model can describe Boolean attributes", function(assert) { if (isEnabled('ds-transform-pass-options') && isEnabled('ds-boolean-transform-allow-null')) { assert.converts('boolean', null, null, { allowNull: true }); - assert.converts('boolean', undefined, null, { allowNull: true }); assert.converts('boolean', null, false, { allowNull: false }); - assert.converts('boolean', undefined, false, { allowNull: false }); // duplicating the tests from the else branch here, so once the feature is // enabled and the else branch is deleted, those assertions are kept assert.converts('boolean', null, false); - assert.converts('boolean', undefined, false); } else { assert.converts('boolean', null, false); - assert.converts('boolean', undefined, false); } assert.converts('boolean', true, true);