root key format

This commit is contained in:
Kyle Fritz 2014-04-14 13:45:12 -04:00
parent 00c54baae3
commit 76c8de7b9f
6 changed files with 32 additions and 17 deletions

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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' },

View File

@ -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' }