Merge branch 'bf4-consider_association_blocks'

This commit is contained in:
Benjamin Fleischer 2016-01-03 23:16:49 -06:00
commit 7d4f0c5c8a
4 changed files with 12 additions and 5 deletions

View File

@ -16,6 +16,11 @@ Breaking changes:
Features:
- [#1378](https://github.com/rails-api/active_model_serializers/pull/1378) Change association blocks
to be evaluated in *serializer* scope, rather than *association* scope. (@bf4)
* Syntax changes from e.g.
`has_many :titles do customers.pluck(:title) end` (in #1356) to
`has_many :titles do object.customers.pluck(:title) end`
- [#1356](https://github.com/rails-api/active_model_serializers/pull/1356) Add inline syntax for
attributes and associations (@bf4 @beauby @noahsilas)
* Allows defining attributes so that they don't conflict with existing methods. e.g. `attribute

View File

@ -8,14 +8,14 @@ module ActiveModel
# has_one :author, serializer: AuthorSerializer
# has_many :comments
# has_many :comments, key: :last_comments do
# last(1)
# object.comments.last(1)
# end
# end
#
# Notice that the association block is evaluated in the context of the association.
# Notice that the association block is evaluated in the context of the serializer.
# Specifically, the association 'comments' is evaluated two different ways:
# 1) as 'comments' and named 'comments'.
# 2) as 'comments.last(1)' and named 'last_comments'.
# 2) as 'object.comments.last(1)' and named 'last_comments'.
#
# PostSerializer._reflections #=>
# # [
@ -29,7 +29,7 @@ module ActiveModel
# @api private
def value(instance)
if block
instance.read_attribute_for_serialization(name).instance_eval(&block)
instance.instance_eval(&block)
else
instance.read_attribute_for_serialization(name)
end

View File

@ -33,6 +33,7 @@ end
class ProfileSerializer < ActiveModel::Serializer
attributes :name, :description
# TODO: is this used anywhere?
def arguments_passed_in?
instance_options[:my_options] == :accessible
end
@ -75,6 +76,7 @@ PostSerializer = Class.new(ActiveModel::Serializer) do
Blog.new(id: 999, name: 'Custom blog')
end
# TODO: is this used anywhere?
def custom_options
instance_options
end

View File

@ -129,7 +129,7 @@ module ActiveModel
class InlineAssociationTestPostSerializer < ActiveModel::Serializer
has_many :comments
has_many :comments, key: :last_comments do
last(1)
object.comments.last(1)
end
end