mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-24 14:56:50 +00:00
root key format
This commit is contained in:
parent
00c54baae3
commit
76c8de7b9f
@ -20,16 +20,13 @@ module ActiveModel
|
|||||||
@meta = options[@meta_key]
|
@meta = options[@meta_key]
|
||||||
@each_serializer = options[:each_serializer]
|
@each_serializer = options[:each_serializer]
|
||||||
@resource_name = options[:resource_name]
|
@resource_name = options[:resource_name]
|
||||||
@key_format = options[:key_format]
|
@key_format = options[:key_format] || options[:each_serializer].try(:key_format)
|
||||||
end
|
end
|
||||||
attr_accessor :object, :scope, :root, :meta_key, :meta, :key_format
|
attr_accessor :object, :scope, :root, :meta_key, :meta, :key_format
|
||||||
|
|
||||||
def json_key
|
def json_key
|
||||||
if root.nil?
|
key = root.nil? ? @resource_name : root
|
||||||
@resource_name
|
key_format == :lower_camel ? key.camelize(:lower) : key
|
||||||
else
|
|
||||||
root
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def serializer_for(item)
|
def serializer_for(item)
|
||||||
|
|||||||
@ -117,14 +117,16 @@ end
|
|||||||
@except = Array(options[:except]) if options[:except]
|
@except = Array(options[:except]) if options[:except]
|
||||||
@key_format = options[:key_format]
|
@key_format = options[:key_format]
|
||||||
end
|
end
|
||||||
attr_accessor :object, :scope, :root, :meta_key, :meta
|
attr_accessor :object, :scope, :root, :meta_key, :meta, :key_format
|
||||||
|
|
||||||
def json_key
|
def json_key
|
||||||
if root == true || root.nil?
|
key = if root == true || root.nil?
|
||||||
self.class.root_name
|
self.class.root_name
|
||||||
else
|
else
|
||||||
root
|
root
|
||||||
end
|
end
|
||||||
|
|
||||||
|
key_format == :lower_camel ? key.camelize(:lower) : key
|
||||||
end
|
end
|
||||||
|
|
||||||
def attributes
|
def attributes
|
||||||
|
|||||||
6
test/fixtures/poro.rb
vendored
6
test/fixtures/poro.rb
vendored
@ -35,7 +35,7 @@ end
|
|||||||
class Comment < Model
|
class Comment < Model
|
||||||
end
|
end
|
||||||
|
|
||||||
class Blog < Model
|
class WebLog < Model
|
||||||
end
|
end
|
||||||
|
|
||||||
###
|
###
|
||||||
@ -66,10 +66,10 @@ class CommentSerializer < ActiveModel::Serializer
|
|||||||
attributes :content
|
attributes :content
|
||||||
end
|
end
|
||||||
|
|
||||||
class BlogSerializer < ActiveModel::Serializer
|
class WebLogSerializer < ActiveModel::Serializer
|
||||||
attributes :name, :display_name
|
attributes :name, :display_name
|
||||||
end
|
end
|
||||||
|
|
||||||
class BlogLowerCamelSerializer < BlogSerializer
|
class WebLogLowerCamelSerializer < WebLogSerializer
|
||||||
format_keys :lower_camel
|
format_keys :lower_camel
|
||||||
end
|
end
|
||||||
|
|||||||
@ -194,6 +194,22 @@ module ActionController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class LowerCamelArraySerializerTest < ActionController::TestCase
|
||||||
|
class WebLogController < ActionController::Base
|
||||||
|
def render_array
|
||||||
|
render json: [WebLog.new({name: 'Name 1', display_name: 'Display Name 1'}), WebLog.new({name: 'Name 2', display_name: 'Display Name 2'})], each_serializer: WebLogLowerCamelSerializer
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
tests WebLogController
|
||||||
|
|
||||||
|
def test_render_array
|
||||||
|
get :render_array
|
||||||
|
assert_equal 'application/json', @response.content_type
|
||||||
|
assert_equal '{"webLog":[{"name":"Name 1","displayName":"Display Name 1"},{"name":"Name 2","displayName":"Display Name 2"}]}', @response.body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
class ArrayEmbedingSerializerTest < ActionController::TestCase
|
class ArrayEmbedingSerializerTest < ActionController::TestCase
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
|
|||||||
@ -4,8 +4,8 @@ module ActiveModel
|
|||||||
class ArraySerializer
|
class ArraySerializer
|
||||||
class KeyFormatTest < Minitest::Test
|
class KeyFormatTest < Minitest::Test
|
||||||
def test_array_serializer_pass_options_to_items_serializers
|
def test_array_serializer_pass_options_to_items_serializers
|
||||||
array = [Blog.new({ name: 'Name 1', display_name: 'Display Name 1'}),
|
array = [WebLog.new({ name: 'Name 1', display_name: 'Display Name 1'}),
|
||||||
Blog.new({ name: 'Name 2', display_name: 'Display Name 2'})]
|
WebLog.new({ name: 'Name 2', display_name: 'Display Name 2'})]
|
||||||
serializer = ArraySerializer.new(array, key_format: :lower_camel)
|
serializer = ArraySerializer.new(array, key_format: :lower_camel)
|
||||||
|
|
||||||
expected = [{ name: 'Name 1', displayName: 'Display Name 1' },
|
expected = [{ name: 'Name 1', displayName: 'Display Name 1' },
|
||||||
|
|||||||
@ -4,8 +4,8 @@ module ActiveModel
|
|||||||
class Serializer
|
class Serializer
|
||||||
class KeyFormatTest < Minitest::Test
|
class KeyFormatTest < Minitest::Test
|
||||||
def test_lower_camel_format_option
|
def test_lower_camel_format_option
|
||||||
object = Blog.new({ name: 'Name 1', display_name: 'Display Name 1'})
|
object = WebLog.new({ name: 'Name 1', display_name: 'Display Name 1'})
|
||||||
serializer = BlogSerializer.new(object, key_format: :lower_camel)
|
serializer = WebLogSerializer.new(object, key_format: :lower_camel)
|
||||||
|
|
||||||
expected = { name: 'Name 1', displayName: 'Display Name 1' }
|
expected = { name: 'Name 1', displayName: 'Display Name 1' }
|
||||||
|
|
||||||
@ -13,8 +13,8 @@ module ActiveModel
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_lower_camel_format_serializer
|
def test_lower_camel_format_serializer
|
||||||
object = Blog.new({ name: 'Name 1', display_name: 'Display Name 1'})
|
object = WebLog.new({ name: 'Name 1', display_name: 'Display Name 1'})
|
||||||
serializer = BlogLowerCamelSerializer.new(object)
|
serializer = WebLogLowerCamelSerializer.new(object)
|
||||||
|
|
||||||
expected = { name: 'Name 1', displayName: 'Display Name 1' }
|
expected = { name: 'Name 1', displayName: 'Display Name 1' }
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user