mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-24 14:56:50 +00:00
array serializer uses root option for json_key if available
This commit is contained in:
parent
1d31096600
commit
1b09d0ec42
@ -5,9 +5,10 @@ module ActiveModel
|
|||||||
include Enumerable
|
include Enumerable
|
||||||
delegate :each, to: :@objects
|
delegate :each, to: :@objects
|
||||||
|
|
||||||
attr_reader :meta, :meta_key
|
attr_reader :root, :meta, :meta_key
|
||||||
|
|
||||||
def initialize(objects, options = {})
|
def initialize(objects, options = {})
|
||||||
|
@root = options[:root]
|
||||||
@resource = objects
|
@resource = objects
|
||||||
@objects = objects.map do |object|
|
@objects = objects.map do |object|
|
||||||
serializer_class = options.fetch(
|
serializer_class = options.fetch(
|
||||||
@ -26,15 +27,8 @@ module ActiveModel
|
|||||||
end
|
end
|
||||||
|
|
||||||
def json_key
|
def json_key
|
||||||
if @objects.first
|
key = root || @objects.first.try(:json_key) || @resource.try(:name).try(:underscore)
|
||||||
@objects.first.json_key.pluralize
|
key.try(:pluralize)
|
||||||
else
|
|
||||||
@resource.name.underscore.pluralize if @resource.try(:name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def root=(root)
|
|
||||||
@objects.first.root = root if @objects.first
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -6,7 +6,13 @@ module ActiveModel
|
|||||||
def setup
|
def setup
|
||||||
@comment = Comment.new
|
@comment = Comment.new
|
||||||
@post = Post.new
|
@post = Post.new
|
||||||
@serializer = ArraySerializer.new([@comment, @post], {some: :options})
|
@resource = build_named_collection @comment, @post
|
||||||
|
@serializer = ArraySerializer.new(@resource, {some: :options})
|
||||||
|
end
|
||||||
|
|
||||||
|
def build_named_collection(*resource)
|
||||||
|
resource.define_singleton_method(:name){ 'MeResource' }
|
||||||
|
resource
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_respond_to_each
|
def test_respond_to_each
|
||||||
@ -39,15 +45,52 @@ module ActiveModel
|
|||||||
assert_equal @serializer.meta_key, "the meta key"
|
assert_equal @serializer.meta_key, "the meta key"
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_json_key_when_resource_is_empty
|
def test_root_default
|
||||||
Array.class_eval do
|
@serializer = ArraySerializer.new([@comment, @post])
|
||||||
def name
|
assert_equal @serializer.root, nil
|
||||||
'PostComment'
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_root
|
||||||
|
expected = 'custom_root'
|
||||||
|
@serializer = ArraySerializer.new([@comment, @post], root: expected)
|
||||||
|
assert_equal @serializer.root, expected
|
||||||
end
|
end
|
||||||
@post_comments = []
|
|
||||||
@serializer = ArraySerializer.new(@post_comments)
|
def test_root_with_no_serializers
|
||||||
assert_equal @serializer.json_key, "post_comments"
|
expected = 'custom_root'
|
||||||
|
@serializer = ArraySerializer.new([], root: expected)
|
||||||
|
assert_equal @serializer.root, expected
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_json_key
|
||||||
|
assert_equal @serializer.json_key, 'comments'
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_json_key_with_resource_with_name_and_no_serializers
|
||||||
|
serializer = ArraySerializer.new(build_named_collection)
|
||||||
|
assert_equal serializer.json_key, 'me_resources'
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_json_key_with_resource_with_nil_name_and_no_serializers
|
||||||
|
resource = []
|
||||||
|
resource.define_singleton_method(:name){ nil }
|
||||||
|
serializer = ArraySerializer.new(resource)
|
||||||
|
assert_equal serializer.json_key, nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_json_key_with_resource_without_name_and_no_serializers
|
||||||
|
serializer = ArraySerializer.new([])
|
||||||
|
assert_equal serializer.json_key, nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_json_key_with_root
|
||||||
|
serializer = ArraySerializer.new(@resource, root: 'custom_root')
|
||||||
|
assert_equal serializer.json_key, 'custom_roots'
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_json_key_with_root_and_no_serializers
|
||||||
|
serializer = ArraySerializer.new(build_named_collection, root: 'custom_root')
|
||||||
|
assert_equal serializer.json_key, 'custom_roots'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user