mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-22 22:06:50 +00:00
Merge pull request #283 from morgoth/add-only-and-except-options-support
Add only and except options support
This commit is contained in:
commit
cffdbce072
@ -363,6 +363,8 @@ module ActiveModel
|
|||||||
end
|
end
|
||||||
|
|
||||||
def include?(name)
|
def include?(name)
|
||||||
|
return false if options.key?(:only) && !Array(options[:only]).include?(name)
|
||||||
|
return false if options.key?(:except) && Array(options[:except]).include?(name)
|
||||||
send INCLUDE_METHODS[name]
|
send INCLUDE_METHODS[name]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -1349,7 +1349,7 @@ class SerializerTest < ActiveModel::TestCase
|
|||||||
]
|
]
|
||||||
}, actual)
|
}, actual)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_inheritance_does_not_used_cached_attributes
|
def test_inheritance_does_not_used_cached_attributes
|
||||||
parent = Class.new(ActiveModel::Serializer) do
|
parent = Class.new(ActiveModel::Serializer) do
|
||||||
attributes :title
|
attributes :title
|
||||||
@ -1359,18 +1359,18 @@ class SerializerTest < ActiveModel::TestCase
|
|||||||
attributes :body
|
attributes :body
|
||||||
end
|
end
|
||||||
|
|
||||||
data_class = Class.new do
|
data_class = Class.new do
|
||||||
attr_accessor :title, :body
|
attr_accessor :title, :body
|
||||||
end
|
end
|
||||||
|
|
||||||
item = data_class.new
|
item = data_class.new
|
||||||
item.title = "title"
|
item.title = "title"
|
||||||
item.body = "body"
|
item.body = "body"
|
||||||
|
|
||||||
2.times do
|
2.times do
|
||||||
assert_equal({:title => "title"},
|
assert_equal({:title => "title"},
|
||||||
parent.new(item).attributes)
|
parent.new(item).attributes)
|
||||||
assert_equal({:body => "body", :title => "title"},
|
assert_equal({:body => "body", :title => "title"},
|
||||||
child.new(item).attributes)
|
child.new(item).attributes)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1390,4 +1390,53 @@ class SerializerTest < ActiveModel::TestCase
|
|||||||
a_serializer = serializer.new(post, :scope => user, :scope_name => :current_user)
|
a_serializer = serializer.new(post, :scope => user, :scope_name => :current_user)
|
||||||
assert a_serializer.has_permission?
|
assert a_serializer.has_permission?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_only_option_filters_attributes_and_associations
|
||||||
|
post = Post.new(:title => "New Post", :body => "Body of new post")
|
||||||
|
comments = [Comment.new(:title => "Comment1")]
|
||||||
|
post.comments = comments
|
||||||
|
|
||||||
|
post_serializer = PostSerializer.new(post, :only => :title)
|
||||||
|
|
||||||
|
assert_equal({
|
||||||
|
:post => {
|
||||||
|
:title => "New Post"
|
||||||
|
}
|
||||||
|
}, post_serializer.as_json)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_except_option_filters_attributes_and_associations
|
||||||
|
post = Post.new(:title => "New Post", :body => "Body of new post")
|
||||||
|
comments = [Comment.new(:title => "Comment1")]
|
||||||
|
post.comments = comments
|
||||||
|
|
||||||
|
post_serializer = PostSerializer.new(post, :except => [:body, :comments])
|
||||||
|
|
||||||
|
assert_equal({
|
||||||
|
:post => {
|
||||||
|
:title => "New Post"
|
||||||
|
}
|
||||||
|
}, post_serializer.as_json)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_only_option_takes_precedence_over_custom_defined_include_methods
|
||||||
|
user = User.new
|
||||||
|
|
||||||
|
post = Post.new(:title => "New Post", :body => "Body of new post", :author => "Sausage King")
|
||||||
|
comments = [Comment.new(:title => "Comment")]
|
||||||
|
post.comments = comments
|
||||||
|
|
||||||
|
post_serializer = PostWithMultipleConditionalsSerializer.new(post, :scope => user, :only => :title)
|
||||||
|
|
||||||
|
# comments enabled
|
||||||
|
post.comments_disabled = false
|
||||||
|
# superuser - should see author
|
||||||
|
user.superuser = true
|
||||||
|
|
||||||
|
assert_equal({
|
||||||
|
:post => {
|
||||||
|
:title => "New Post"
|
||||||
|
}
|
||||||
|
}, post_serializer.as_json)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user