Add serializer to association block context

This commit is contained in:
Benjamin Fleischer 2016-03-30 11:03:38 -05:00
parent d5833e8e1b
commit ae6805eacd
2 changed files with 12 additions and 3 deletions

View File

@ -59,6 +59,8 @@ module ActiveModel
def value(serializer)
@object = serializer.object
@scope = serializer.scope
# Add '@serializer' to binding for use in association block as 'serializer'
@serializer = serializer
if block
block_value = instance_eval(&block)
@ -117,7 +119,7 @@ module ActiveModel
protected
attr_accessor :object, :scope
attr_accessor :object, :scope, :serializer
private

View File

@ -40,6 +40,7 @@ module ActiveModel
has_many :roles do
meta count: object.posts.count
serializer.cached_roles
end
has_one :blog do
@ -60,6 +61,12 @@ module ActiveModel
end
meta liked: object.likes.any?
end
def cached_roles
[
Role.new(id: 'from-serializer-method')
]
end
end
def setup
@ -67,7 +74,7 @@ module ActiveModel
@blog = Blog.new(id: 1337, name: 'extra')
@bio = Bio.new(id: 1337)
@like = Like.new(id: 1337)
@role = Role.new(id: 1337)
@role = Role.new(id: 'from-record')
@profile = Profile.new(id: 1337)
@location = Location.new(id: 1337)
@reviewer = Author.new(id: 1337)
@ -144,7 +151,7 @@ module ActiveModel
def test_relationship_meta
expected = {
data: [{ id: '1337', type: 'roles' }],
data: [{ id: 'from-serializer-method', type: 'roles' }],
meta: { count: 1 }
}
assert_relationship(:roles, expected)