Skip to content

Commit

Permalink
Merge branch 'bf4-consider_association_blocks'
Browse files Browse the repository at this point in the history
  • Loading branch information
bf4 committed Jan 4, 2016
2 parents 41ae5f7 + d7de53c commit 7d4f0c5
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 5 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions lib/active_model/serializer/reflection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ class Serializer
# 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 #=>
# # [
Expand All @@ -29,7 +29,7 @@ class Serializer
# @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
Expand Down
2 changes: 2 additions & 0 deletions test/fixtures/poro.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class Profile < Model
class ProfileSerializer < ActiveModel::Serializer
attributes :name, :description

# TODO: is this used anywhere?
def arguments_passed_in?
instance_options[:my_options] == :accessible
end
Expand Down Expand Up @@ -75,6 +76,7 @@ def blog
Blog.new(id: 999, name: 'Custom blog')
end

# TODO: is this used anywhere?
def custom_options
instance_options
end
Expand Down
2 changes: 1 addition & 1 deletion test/serializers/associations_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ def test_associations_custom_keys
class InlineAssociationTestPostSerializer < ActiveModel::Serializer
has_many :comments
has_many :comments, key: :last_comments do
last(1)
object.comments.last(1)
end
end

Expand Down

0 comments on commit 7d4f0c5

Please sign in to comment.