mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16:50 +00:00
Merge pull request #975 from GriffinHeart/fix-virtual-values
Fixes virtual value not being used
This commit is contained in:
commit
a895de76bf
@ -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 }
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
14
test/fixtures/poro.rb
vendored
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user