Skip to content

Commit f363496

Browse files
jkeenleondmello
authored andcommitted
Respect serializer keyForAttribute transform when rebuilding payload (#10)
1 parent a9d8d96 commit f363496

File tree

4 files changed

+29
-2
lines changed

4 files changed

+29
-2
lines changed

addon/mixins/nested-relations.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,17 @@ const attributesFor = function(record, isManyToManyDelete) {
3535
let attrs = {};
3636

3737
let changes = record.changedAttributes();
38+
39+
let serializer = record.store.serializerFor(record.constructor.modelName);
40+
3841
record.eachAttribute((name/* meta */) => {
42+
let keyName = serializer.keyForAttribute(name);
43+
3944
if (record.get('isNew') || changes[name]) {
4045
let value = record.get(name);
4146

4247
if (value !== undefined) {
43-
attrs[name] = record.get(name);
48+
attrs[keyName] = record.get(name);
4449
}
4550
}
4651
});

tests/dummy/app/models/post.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import ModelMixin from 'ember-data-extensions/mixins/model';
44

55
export default DS.Model.extend(ModelMixin, {
66
title: DS.attr('string'),
7+
publishedDate: DS.attr('date'),
78

89
author: DS.belongsTo('author'),
910
tags: DS.hasMany('tag'),
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import DS from 'ember-data';
22
import NestedRelationsMixin from 'ember-data-extensions/mixins/nested-relations';
3-
3+
import Ember from 'ember';
44
export default DS.JSONAPISerializer.extend(NestedRelationsMixin, {
5+
keyForAttribute(key /* relationship, method */) {
6+
return Ember.String.underscore(key);
7+
}
58
});

tests/unit/mixins/nested-relations-test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ const Genre = DS.Model.extend(ModelMixin, NestedRelationsMixin, {
3434

3535
const Post = DS.Model.extend(ModelMixin, NestedRelationsMixin, {
3636
title: DS.attr('string'),
37+
publishedDate: DS.attr('date'),
3738
genre: DS.belongsTo(),
3839
author: DS.belongsTo(),
3940
asyncFalseAuthor: DS.belongsTo('author', { async: false }),
@@ -151,6 +152,23 @@ test('it serializes basic attributes correctly', function(assert) {
151152
assert.deepEqual(json, expectedJSON, 'has correct json');
152153
});
153154

155+
test('it respects custom keyForAttribute settings in serializer', function(assert) {
156+
let date = new Date();
157+
let post = store.createRecord('post', { publishedDate: date });
158+
let json = serialize(post, {});
159+
160+
let expectedJSON = {
161+
data: {
162+
type: 'posts',
163+
attributes: {
164+
published_date: date // serializer transforms to underscores
165+
}
166+
}
167+
};
168+
169+
assert.deepEqual(json, expectedJSON, 'has correct json');
170+
});
171+
154172
test('it does not serialize undefined attributes', function(assert) {
155173
let post = store.createRecord('post');
156174
let json = serialize(post, {});

0 commit comments

Comments
 (0)