Merge pull request #771 from sweatypitts/master

Make linked resource type names consistent with root names
This commit is contained in:
Guillermo Iguaran 2015-01-11 16:20:15 -05:00
commit 7085afe714
5 changed files with 39 additions and 4 deletions

View File

@ -126,7 +126,7 @@ module ActiveModel
def serialized_object_type(serializer)
return false unless Array(serializer).first
type_name = Array(serializer).first.object.class.to_s.underscore
type_name = Array(serializer).first.object.class.to_s.demodulize.underscore
if serializer.respond_to?(:first)
type_name.pluralize
else

View File

@ -64,7 +64,7 @@ module ActiveModel
assert_equal({comments: [], author: nil}, adapter.serializable_hash[:posts][:links])
end
def test_include_type_for_association_when_is_different_than_name
def test_include_type_for_association_when_different_than_name
serializer = BlogSerializer.new(@blog)
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer)
links = adapter.serializable_hash[:blogs][:links]

View File

@ -78,10 +78,15 @@ module ActiveModel
assert_nil adapter.serializable_hash[:linked]
end
def test_include_type_for_association_when_is_different_than_name
def test_include_type_for_association_when_different_than_name
serializer = BlogSerializer.new(@blog)
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer)
assert_equal({type: "posts", ids: ["1"]}, adapter.serializable_hash[:blogs][:links][:articles])
actual = adapter.serializable_hash[:blogs][:links][:articles]
expected = {
type: "posts",
ids: ["1"]
}
assert_equal(expected, actual)
end
end
end

View File

@ -138,6 +138,21 @@ module ActiveModel
}
assert_equal expected, @adapter.serializable_hash[:linked]
end
def test_ignore_model_namespace_for_linked_resource_type
spammy_post = Post.new(id: 123)
spammy_post.related = [Spam::UnrelatedLink.new(id: 456)]
serializer = SpammyPostSerializer.new(spammy_post)
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer)
links = adapter.serializable_hash[:posts][:links]
expected = {
related: {
type: 'unrelated_links',
ids: ['456']
}
}
assert_equal expected, links
end
end
end
end

15
test/fixtures/poro.rb vendored
View File

@ -47,6 +47,8 @@ Author = Class.new(Model)
Bio = Class.new(Model)
Blog = Class.new(Model)
Role = Class.new(Model)
module Spam; end
Spam::UnrelatedLink = Class.new(Model)
PostSerializer = Class.new(ActiveModel::Serializer) do
attributes :title, :body, :id
@ -56,6 +58,15 @@ PostSerializer = Class.new(ActiveModel::Serializer) do
url :comments
end
SpammyPostSerializer = Class.new(ActiveModel::Serializer) do
attributes :id
has_many :related
def self.root_name
'posts'
end
end
CommentSerializer = Class.new(ActiveModel::Serializer) do
attributes :id, :body
@ -123,3 +134,7 @@ PostPreviewSerializer = Class.new(ActiveModel::Serializer) do
has_many :comments, serializer: CommentPreviewSerializer
belongs_to :author, serializer: AuthorPreviewSerializer
end
Spam::UnrelatedLinkSerializer = Class.new(ActiveModel::Serializer) do
attributes :id
end