From cc517b68f915ea2af680b48c2ec2881759b03e65 Mon Sep 17 00:00:00 2001 From: bmac Date: Mon, 9 Feb 2015 13:09:23 -0500 Subject: [PATCH] Ember Data should delegate to the container to normalize the type key. Closes #2761 --- packages/ember-data/lib/serializers/rest_serializer.js | 2 +- packages/ember-data/lib/system/store.js | 9 +++++---- .../ember-data/tests/unit/store/create_record_test.js | 4 ++-- packages/ember-data/tests/unit/store/model_for_test.js | 6 +++--- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/ember-data/lib/serializers/rest_serializer.js b/packages/ember-data/lib/serializers/rest_serializer.js index 3a17e07e669..0d6beb0e758 100644 --- a/packages/ember-data/lib/serializers/rest_serializer.js +++ b/packages/ember-data/lib/serializers/rest_serializer.js @@ -723,7 +723,7 @@ var RESTSerializer = JSONSerializer.extend({ @param {Object} options */ serializeIntoHash: function(hash, type, record, options) { - hash[type.typeKey] = this.serialize(record, options); + hash[this.typeForRoot(type.typeKey)] = this.serialize(record, options); }, /** diff --git a/packages/ember-data/lib/system/store.js b/packages/ember-data/lib/system/store.js index 008e2d856e9..bfb3e916f59 100644 --- a/packages/ember-data/lib/system/store.js +++ b/packages/ember-data/lib/system/store.js @@ -9,7 +9,6 @@ import { InvalidError, Adapter } from "ember-data/system/adapter"; -import { singularize } from "ember-inflector/system/string"; import { Map } from "ember-data/system/map"; @@ -77,8 +76,6 @@ var Promise = Ember.RSVP.Promise; var copy = Ember.copy; var Store; -var camelize = Ember.String.camelize; - // Implementors Note: // // The variables in this file are consistently named according to the following @@ -1777,7 +1774,11 @@ Store = Ember.Object.extend({ @return {String} if the adapter can generate one, an ID */ _normalizeTypeKey: function(key) { - return camelize(singularize(key)); + // Delegate to the container for normalization. The container + // requires a ':' to normalize so we add `model:` then slice off + // the first 6 characters to remove the `model:` in the return + // value + return this.container.normalize('model:' + key).slice(6); } }); diff --git a/packages/ember-data/tests/unit/store/create_record_test.js b/packages/ember-data/tests/unit/store/create_record_test.js index 0141f561e73..e54895a8fa5 100644 --- a/packages/ember-data/tests/unit/store/create_record_test.js +++ b/packages/ember-data/tests/unit/store/create_record_test.js @@ -42,7 +42,7 @@ test("creating a record by camel-case string finds the model", function() { }); equal(record.get('foo'), attributes.foo, "The record is created"); - equal(store.modelFor('someThing').typeKey, 'someThing'); + equal(store.modelFor('someThing').typeKey, 'some-thing'); }); test("creating a record by dasherize string finds the model", function() { @@ -54,7 +54,7 @@ test("creating a record by dasherize string finds the model", function() { }); equal(record.get('foo'), attributes.foo, "The record is created"); - equal(store.modelFor('some-thing').typeKey, 'someThing'); + equal(store.modelFor('some-thing').typeKey, 'some-thing'); }); module("unit/store/createRecord - Store with models by camelCase", { diff --git a/packages/ember-data/tests/unit/store/model_for_test.js b/packages/ember-data/tests/unit/store/model_for_test.js index c6af8ded27b..75b048ed0ba 100644 --- a/packages/ember-data/tests/unit/store/model_for_test.js +++ b/packages/ember-data/tests/unit/store/model_for_test.js @@ -28,7 +28,7 @@ test("when fetching factory from string, sets a normalized key as typeKey", func env.replaceContainerNormalize(camelize); equal(container.normalize('some.post'), 'somePost', 'precond - container camelizes'); - equal(store.modelFor("blog.post").typeKey, "blogPost", "typeKey is normalized to camelCase"); + equal(store.modelFor("blog.post").typeKey, "blogPost", "typeKey is normalized by the container"); }); test("when fetching factory from string and dashing normalizer, sets a normalized key as typeKey", function() { @@ -37,12 +37,12 @@ test("when fetching factory from string and dashing normalizer, sets a normalize }); equal(container.normalize('some.post'), 'some-post', 'precond - container dasherizes'); - equal(store.modelFor("blog.post").typeKey, "blogPost", "typeKey is normalized to camelCase"); + equal(store.modelFor("blog.post").typeKey, "blog-post", "typeKey is normalized by the container"); }); test("when returning passed factory, sets a normalized key as typeKey", function() { var factory = { typeKey: 'some-thing' }; - equal(store.modelFor(factory).typeKey, "someThing", "typeKey is normalized to camelCase"); + equal(store.modelFor(factory).typeKey, "some-thing", "typeKey is normalized to camelCase"); }); test("when returning passed factory without typeKey, allows it", function() {