mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16: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]
|
||||
@each_serializer = options[:each_serializer]
|
||||
@resource_name = options[:resource_name]
|
||||
@key_format = options[:key_format]
|
||||
@key_format = options[:key_format] || options[:each_serializer].try(:key_format)
|
||||
end
|
||||
attr_accessor :object, :scope, :root, :meta_key, :meta, :key_format
|
||||
|
||||
def json_key
|
||||
if root.nil?
|
||||
@resource_name
|
||||
else
|
||||
root
|
||||
end
|
||||
key = root.nil? ? @resource_name : root
|
||||
key_format == :lower_camel ? key.camelize(:lower) : key
|
||||
end
|
||||
|
||||
def serializer_for(item)
|
||||
|
||||
@ -117,14 +117,16 @@ end
|
||||
@except = Array(options[:except]) if options[:except]
|
||||
@key_format = options[:key_format]
|
||||
end
|
||||
attr_accessor :object, :scope, :root, :meta_key, :meta
|
||||
attr_accessor :object, :scope, :root, :meta_key, :meta, :key_format
|
||||
|
||||
def json_key
|
||||
if root == true || root.nil?
|
||||
key = if root == true || root.nil?
|
||||
self.class.root_name
|
||||
else
|
||||
root
|
||||
end
|
||||
|
||||
key_format == :lower_camel ? key.camelize(:lower) : key
|
||||
end
|
||||
|
||||
def attributes
|
||||
|
||||
6
test/fixtures/poro.rb
vendored
6
test/fixtures/poro.rb
vendored
@ -35,7 +35,7 @@ end
|
||||
class Comment < Model
|
||||
end
|
||||
|
||||
class Blog < Model
|
||||
class WebLog < Model
|
||||
end
|
||||
|
||||
###
|
||||
@ -66,10 +66,10 @@ class CommentSerializer < ActiveModel::Serializer
|
||||
attributes :content
|
||||
end
|
||||
|
||||
class BlogSerializer < ActiveModel::Serializer
|
||||
class WebLogSerializer < ActiveModel::Serializer
|
||||
attributes :name, :display_name
|
||||
end
|
||||
|
||||
class BlogLowerCamelSerializer < BlogSerializer
|
||||
class WebLogLowerCamelSerializer < WebLogSerializer
|
||||
format_keys :lower_camel
|
||||
end
|
||||
|
||||
@ -194,6 +194,22 @@ module ActionController
|
||||
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
|
||||
def setup
|
||||
super
|
||||
|
||||
@ -4,8 +4,8 @@ module ActiveModel
|
||||
class ArraySerializer
|
||||
class KeyFormatTest < Minitest::Test
|
||||
def test_array_serializer_pass_options_to_items_serializers
|
||||
array = [Blog.new({ name: 'Name 1', display_name: 'Display Name 1'}),
|
||||
Blog.new({ name: 'Name 2', display_name: 'Display Name 2'})]
|
||||
array = [WebLog.new({ name: 'Name 1', display_name: 'Display Name 1'}),
|
||||
WebLog.new({ name: 'Name 2', display_name: 'Display Name 2'})]
|
||||
serializer = ArraySerializer.new(array, key_format: :lower_camel)
|
||||
|
||||
expected = [{ name: 'Name 1', displayName: 'Display Name 1' },
|
||||
|
||||
@ -4,8 +4,8 @@ module ActiveModel
|
||||
class Serializer
|
||||
class KeyFormatTest < Minitest::Test
|
||||
def test_lower_camel_format_option
|
||||
object = Blog.new({ name: 'Name 1', display_name: 'Display Name 1'})
|
||||
serializer = BlogSerializer.new(object, key_format: :lower_camel)
|
||||
object = WebLog.new({ name: 'Name 1', display_name: 'Display Name 1'})
|
||||
serializer = WebLogSerializer.new(object, key_format: :lower_camel)
|
||||
|
||||
expected = { name: 'Name 1', displayName: 'Display Name 1' }
|
||||
|
||||
@ -13,8 +13,8 @@ module ActiveModel
|
||||
end
|
||||
|
||||
def test_lower_camel_format_serializer
|
||||
object = Blog.new({ name: 'Name 1', display_name: 'Display Name 1'})
|
||||
serializer = BlogLowerCamelSerializer.new(object)
|
||||
object = WebLog.new({ name: 'Name 1', display_name: 'Display Name 1'})
|
||||
serializer = WebLogLowerCamelSerializer.new(object)
|
||||
|
||||
expected = { name: 'Name 1', displayName: 'Display Name 1' }
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user