Fixes virtual value not being used

This commit is contained in:
Hugo Almeida 2015-06-29 10:48:12 +09:00
parent 059409b0b9
commit f25071ca70
4 changed files with 54 additions and 2 deletions

View File

@ -49,7 +49,7 @@ module ActiveModel
def add_relationship(resource, name, serializer, val=nil)
resource[:relationships] ||= {}
resource[:relationships][name] = { data: nil }
resource[:relationships][name] = { data: val }
if serializer && serializer.object
resource[:relationships][name][:data] = { type: serializer.type, id: serializer.id.to_s }

View File

@ -31,6 +31,8 @@ module ActiveModel
@post.tags = [@tag]
@serializer = PostSerializer.new(@post)
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer)
@virtual_value = VirtualValue.new(id: 1)
end
def test_includes_comment_ids
@ -115,7 +117,23 @@ module ActiveModel
id: "1",
type: "posts",
relationships: {
tags: { data: nil }
tags: { data: [@tag.as_json]}
}
}
}, adapter.serializable_hash)
end
def test_has_many_with_virtual_value
serializer = VirtualValueSerializer.new(@virtual_value)
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer)
assert_equal({
data: {
id: "1",
type: "virtual_values",
relationships: {
maker: {data: {id: 1}},
reviews: {data: [{id: 1}, {id: 2}]}
}
}
}, adapter.serializable_hash)

View File

@ -25,6 +25,8 @@ module ActiveModel
@author.posts = []
@author.roles = []
@virtual_value = VirtualValue.new(id: 1)
@serializer = AuthorSerializer.new(@author)
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer, include: 'bio,posts')
end
@ -54,6 +56,24 @@ module ActiveModel
assert_equal(expected, @adapter.serializable_hash[:included])
end
def test_has_one_with_virtual_value
serializer = VirtualValueSerializer.new(@virtual_value)
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer)
expected = {
data: {
id: "1",
type: "virtual_values",
relationships: {
maker: {data: {id: 1}},
reviews: {data: [{id: 1}, {id: 2}]}
}
}
}
assert_equal(expected, adapter.serializable_hash)
end
end
end
end

14
test/fixtures/poro.rb vendored
View File

@ -77,6 +77,7 @@ User = Class.new(Model)
Location = Class.new(Model)
Place = Class.new(Model)
Tag = Class.new(Model)
VirtualValue = Class.new(Model)
Comment = Class.new(Model) do
# Uses a custom non-time-based cache key
def cache_key
@ -231,6 +232,19 @@ PostWithTagsSerializer = Class.new(ActiveModel::Serializer) do
has_many :tags
end
VirtualValueSerializer = Class.new(ActiveModel::Serializer) do
attributes :id
has_many :reviews, virtual_value: [{id: 1}, {id: 2}]
has_one :maker, virtual_value: {id: 1}
def reviews
end
def maker
end
end
Spam::UnrelatedLinkSerializer = Class.new(ActiveModel::Serializer) do
attributes :id
end