Merge pull request #975 from GriffinHeart/fix-virtual-values

Fixes virtual value not being used
This commit is contained in:
João Moura 2015-07-01 23:04:54 -03:00
commit a895de76bf
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) def add_relationship(resource, name, serializer, val=nil)
resource[:relationships] ||= {} resource[:relationships] ||= {}
resource[:relationships][name] = { data: nil } resource[:relationships][name] = { data: val }
if serializer && serializer.object if serializer && serializer.object
resource[:relationships][name][:data] = { type: serializer.type, id: serializer.id.to_s } resource[:relationships][name][:data] = { type: serializer.type, id: serializer.id.to_s }

View File

@ -31,6 +31,8 @@ module ActiveModel
@post.tags = [@tag] @post.tags = [@tag]
@serializer = PostSerializer.new(@post) @serializer = PostSerializer.new(@post)
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer) @adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer)
@virtual_value = VirtualValue.new(id: 1)
end end
def test_includes_comment_ids def test_includes_comment_ids
@ -115,7 +117,23 @@ module ActiveModel
id: "1", id: "1",
type: "posts", type: "posts",
relationships: { 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) }, adapter.serializable_hash)

View File

@ -25,6 +25,8 @@ module ActiveModel
@author.posts = [] @author.posts = []
@author.roles = [] @author.roles = []
@virtual_value = VirtualValue.new(id: 1)
@serializer = AuthorSerializer.new(@author) @serializer = AuthorSerializer.new(@author)
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer, include: 'bio,posts') @adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer, include: 'bio,posts')
end end
@ -54,6 +56,24 @@ module ActiveModel
assert_equal(expected, @adapter.serializable_hash[:included]) assert_equal(expected, @adapter.serializable_hash[:included])
end 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 end
end end

14
test/fixtures/poro.rb vendored
View File

@ -77,6 +77,7 @@ User = Class.new(Model)
Location = Class.new(Model) Location = Class.new(Model)
Place = Class.new(Model) Place = Class.new(Model)
Tag = Class.new(Model) Tag = Class.new(Model)
VirtualValue = Class.new(Model)
Comment = Class.new(Model) do Comment = Class.new(Model) do
# Uses a custom non-time-based cache key # Uses a custom non-time-based cache key
def cache_key def cache_key
@ -231,6 +232,19 @@ PostWithTagsSerializer = Class.new(ActiveModel::Serializer) do
has_many :tags has_many :tags
end 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 Spam::UnrelatedLinkSerializer = Class.new(ActiveModel::Serializer) do
attributes :id attributes :id
end end