diff --git a/lib/active_model/array_serializer.rb b/lib/active_model/array_serializer.rb index 8a42e18a1..b314dbfcd 100644 --- a/lib/active_model/array_serializer.rb +++ b/lib/active_model/array_serializer.rb @@ -25,7 +25,8 @@ def initialize(object, options={}) def json_key key = root.nil? ? @resource_name : root - key_format == :lower_camel ? key.camelize(:lower) : key + + key_format == :lower_camel && key.present? ? key.camelize(:lower) : key end def serializer_for(item) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index bd1a3ac55..8a0e856ed 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -126,7 +126,7 @@ def json_key root end - key_format == :lower_camel ? key.camelize(:lower) : key + key_format == :lower_camel && key.present? ? key.camelize(:lower) : key end def attributes diff --git a/test/integration/action_controller/serialization_test.rb b/test/integration/action_controller/serialization_test.rb index 9065e211f..5d1736063 100644 --- a/test/integration/action_controller/serialization_test.rb +++ b/test/integration/action_controller/serialization_test.rb @@ -210,6 +210,43 @@ def test_render_array end end + class LowerCamelWoRootSerializerTest < ActionController::TestCase + class WebLogController < ActionController::Base + def render_without_root + render json: WebLog.new({name: 'Name 1', display_name: 'Display Name 1'}), + root: false, + serializer: WebLogLowerCamelSerializer + end + end + + tests WebLogController + + def test_render_without_root + get :render_without_root + assert_equal 'application/json', @response.content_type + assert_equal '{"name":"Name 1","displayName":"Display Name 1"}', @response.body + end + end + + class LowerCamelArrayWoRootSerializerTest < ActionController::TestCase + class WebLogController < ActionController::Base + def render_array_without_root + render json: [WebLog.new({name: 'Name 1', display_name: 'Display Name 1'}), + WebLog.new({name: 'Name 2', display_name: 'Display Name 2'})], + root: false, + each_serializer: WebLogLowerCamelSerializer + end + end + + tests WebLogController + + def test_render_array_without_root + get :render_array_without_root + assert_equal 'application/json', @response.content_type + assert_equal '[{"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