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

View File

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

View File

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

View File

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

View File

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

View File

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