converted has many to use string key for association, makeing it compatable with has_one; fixed tests that relied on symbol keys for has_many associations

This commit is contained in:
Kevin Bullaughey 2014-09-21 07:52:17 -04:00
parent 34d684ee9a
commit edfd38bdee
5 changed files with 25 additions and 26 deletions

View File

@ -4,12 +4,11 @@ module ActiveModel
class HasMany < Association class HasMany < Association
def initialize(name, *args) def initialize(name, *args)
super super
@root_key = @embedded_key @root_key = @embedded_key.to_s
@key ||= case CONFIG.default_key_type @key ||= case CONFIG.default_key_type
when :name then name.to_s.pluralize when :name then name.to_s.pluralize
else "#{name.to_s.singularize}_ids" else "#{name.to_s.singularize}_ids"
end end
end end
def serializer_class(object, _) def serializer_class(object, _)
@ -37,4 +36,4 @@ module ActiveModel
end end
end end
end end
end end

View File

@ -49,9 +49,9 @@ module ActiveModel
'ar_tag_ids' => [1, 2], 'ar_tag_ids' => [1, 2],
'ar_section_id' => 1 'ar_section_id' => 1
}, },
ar_comments: [{ body: 'what a dumb post', 'ar_tag_ids' => [3, 2] }, 'ar_comments' => [{ body: 'what a dumb post', 'ar_tag_ids' => [3, 2] },
{ body: 'i liked it', 'ar_tag_ids' => [3, 1] }], { body: 'i liked it', 'ar_tag_ids' => [3, 1] }],
ar_tags: [{ name: 'happy' }, { name: 'whiny' }, { name: 'short' }], 'ar_tags' => [{ name: 'happy' }, { name: 'whiny' }, { name: 'short' }],
'ar_sections' => [{ 'name' => 'ruby' }] 'ar_sections' => [{ 'name' => 'ruby' }]
}, post_serializer.as_json) }, post_serializer.as_json)
end end

View File

@ -85,7 +85,7 @@ module ActiveModel
{title: "Title 1", body: "Body 1", "comment_ids" => @post1.comments.map(&:object_id) }, {title: "Title 1", body: "Body 1", "comment_ids" => @post1.comments.map(&:object_id) },
{title: "Title 2", body: "Body 2", "comment_ids" => @post2.comments.map(&:object_id) } {title: "Title 2", body: "Body 2", "comment_ids" => @post2.comments.map(&:object_id) }
], ],
comments: [ 'comments' => [
{content: "C1"}, {content: "C1"},
{content: "C2"}, {content: "C2"},
{content: "C3"}, {content: "C3"},

View File

@ -140,7 +140,7 @@ module ActiveModel
{ id: c.object_id, type: model_name(c) } { id: c.object_id, type: model_name(c) }
end, end,
}, },
attachments: [ 'attachments' => [
{ type: :image, image: { url: 'U1' }}, { type: :image, image: { url: 'U1' }},
{ type: :video, video: { html: 'H1' }} { type: :video, video: { html: 'H1' }}
] ]
@ -153,7 +153,7 @@ module ActiveModel
assert_equal({ assert_equal({
'mail' => { body: 'Body 1' }, 'mail' => { body: 'Body 1' },
attachments: [ 'attachments' => [
{ type: :image, image: { url: 'U1' }}, { type: :image, image: { url: 'U1' }},
{ type: :video, video: { html: 'H1' }} { type: :video, video: { html: 'H1' }}
] ]
@ -178,7 +178,7 @@ module ActiveModel
{ id: c.object_id, type: model_name(c) } { id: c.object_id, type: model_name(c) }
end end
}, },
attachments: [ 'attachments' => [
{ type: :image, image: { fake: 'fake' }}, { type: :image, image: { fake: 'fake' }},
{ type: :video, video: { fake: 'fake' }} { type: :video, video: { fake: 'fake' }}
] ]

View File

@ -111,7 +111,7 @@ module ActiveModel
assert_equal({ assert_equal({
'post' => { title: 'Title 1', body: 'Body 1', 'comment_ids' => @post.comments.map { |c| c.object_id } }, 'post' => { title: 'Title 1', body: 'Body 1', 'comment_ids' => @post.comments.map { |c| c.object_id } },
comments: [{ content: 'C1' }, { content: 'C2' }] 'comments' => [{ content: 'C1' }, { content: 'C2' }]
}, @post_serializer.as_json) }, @post_serializer.as_json)
end end
@ -128,7 +128,7 @@ module ActiveModel
name: 'Name 1', name: 'Name 1',
posts: [{ title: 'Title 1', body: 'Body 1', 'comment_ids' => @post.comments.map { |c| c.object_id } }] posts: [{ title: 'Title 1', body: 'Body 1', 'comment_ids' => @post.comments.map { |c| c.object_id } }]
}, },
comments: [{ content: 'C1' }, { content: 'C2' }] "comments" => [{ content: 'C1' }, { content: 'C2' }]
}, category_serializer.as_json) }, category_serializer.as_json)
end end
@ -138,7 +138,7 @@ module ActiveModel
assert_equal({ assert_equal({
'post' => { title: 'Title 1', body: 'Body 1' }, 'post' => { title: 'Title 1', body: 'Body 1' },
comments: [{ content: 'C1' }, { content: 'C2' }] 'comments' => [{ content: 'C1' }, { content: 'C2' }]
}, @post_serializer.as_json) }, @post_serializer.as_json)
end end
@ -155,7 +155,7 @@ module ActiveModel
assert_equal({ assert_equal({
'post' => { title: 'Title 1', body: 'Body 1', 'comment_ids' => @post.comments.map { |c| c.object_id } }, 'post' => { title: 'Title 1', body: 'Body 1', 'comment_ids' => @post.comments.map { |c| c.object_id } },
comments: [{ content: 'C1!' }, { content: 'C2!' }] 'comments' => [{ content: 'C1!' }, { content: 'C2!' }]
}, @post_serializer.as_json) }, @post_serializer.as_json)
end end
@ -170,7 +170,7 @@ module ActiveModel
assert_equal({ assert_equal({
'post' => { title: 'Title 1', body: 'Body 1', 'comment_ids' => @post.comments.map { |c| c.object_id } }, 'post' => { title: 'Title 1', body: 'Body 1', 'comment_ids' => @post.comments.map { |c| c.object_id } },
comments: { my_content: ['fake'] } 'comments' => { my_content: ['fake'] }
}, @post_serializer.as_json) }, @post_serializer.as_json)
end end
@ -191,16 +191,16 @@ module ActiveModel
@association.embed_in_root_key = :linked @association.embed_in_root_key = :linked
@association.embed = :ids @association.embed = :ids
assert_equal({ assert_equal({
'post' => {
title: 'Title 1', body: 'Body 1',
'comment_ids' => @post.comments.map(&:object_id)
},
linked: { linked: {
comments: [ 'comments' => [
{ content: 'C1' }, { content: 'C1' },
{ content: 'C2' } { content: 'C2' }
] ]
}, },
'post' => {
title: 'Title 1', body: 'Body 1',
'comment_ids' => @post.comments.map(&:object_id)
}
}, @post_serializer.as_json) }, @post_serializer.as_json)
end end
@ -211,18 +211,18 @@ module ActiveModel
@association.embed_namespace = :links @association.embed_namespace = :links
@association.key = :comments @association.key = :comments
assert_equal({ assert_equal({
linked: {
comments: [
{ content: 'C1' },
{ content: 'C2' }
]
},
'post' => { 'post' => {
title: 'Title 1', body: 'Body 1', title: 'Title 1', body: 'Body 1',
links: { links: {
comments: @post.comments.map(&:object_id) comments: @post.comments.map(&:object_id)
} }
} },
linked: {
'comments' => [
{ content: 'C1' },
{ content: 'C2' }
]
},
}, @post_serializer.as_json) }, @post_serializer.as_json)
end end