mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-24 14:56: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)
|
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 }
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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
14
test/fixtures/poro.rb
vendored
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user