From 48590a2e3793b8bf7f0395b8a29513c256aa18c9 Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Mon, 26 Aug 2013 15:20:58 -0300 Subject: [PATCH] Allow to set root for associations through options --- lib/active_model/serializer/associations.rb | 6 +++--- test/unit/active_model/serializer/has_many_test.rb | 9 +++++++++ test/unit/active_model/serializer/has_one_test.rb | 9 +++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/active_model/serializer/associations.rb b/lib/active_model/serializer/associations.rb index e78bce9c..81977316 100644 --- a/lib/active_model/serializer/associations.rb +++ b/lib/active_model/serializer/associations.rb @@ -14,7 +14,7 @@ module ActiveModel self.serializer_class = @options[:serializer] end - attr_reader :name, :embed_ids, :embed_objects, :embed_key, :serializer_class + attr_reader :name, :embed_ids, :embed_objects, :embed_key, :serializer_class, :options attr_accessor :include alias embed_ids? embed_ids alias embed_objects? embed_objects @@ -49,7 +49,7 @@ module ActiveModel end def embedded_key - name.pluralize + @options[:root] || name.pluralize end end @@ -59,7 +59,7 @@ module ActiveModel end def embedded_key - name + @options[:root] || name end end end diff --git a/test/unit/active_model/serializer/has_many_test.rb b/test/unit/active_model/serializer/has_many_test.rb index cc70338a..03b9df7c 100644 --- a/test/unit/active_model/serializer/has_many_test.rb +++ b/test/unit/active_model/serializer/has_many_test.rb @@ -9,6 +9,7 @@ module ActiveModel @association = PostSerializer._associations[0] @association.include = false @association.embed = :ids + @association.options[:root] = nil end def test_associations_definition @@ -43,6 +44,14 @@ module ActiveModel }, @post_serializer.as_json) end + def test_associations_embedding_objects_serialization_using_serializable_hash_and_root_from_options + @association.embed = :objects + @association.options[:root] = 'root' + assert_equal({ + 'title' => 'Title 1', 'body' => 'Body 1', 'root' => [{ 'content' => 'C1' }, { 'content' => 'C2' }] + }, @post_serializer.serializable_hash) + end + def test_associations_embedding_ids_including_objects_serialization_using_serializable_hash @association.include = true assert_equal({ diff --git a/test/unit/active_model/serializer/has_one_test.rb b/test/unit/active_model/serializer/has_one_test.rb index b104d652..7a548a0f 100644 --- a/test/unit/active_model/serializer/has_one_test.rb +++ b/test/unit/active_model/serializer/has_one_test.rb @@ -9,6 +9,7 @@ module ActiveModel @association = UserSerializer._associations[0] @association.include = false @association.embed = :ids + @association.options[:root] = nil end def test_associations_definition @@ -43,6 +44,14 @@ module ActiveModel }, @user_serializer.as_json) end + def test_associations_embedding_objects_serialization_using_serializable_hash_and_root_from_options + @association.embed = :objects + @association.options[:root] = 'root' + assert_equal({ + 'name' => 'Name 1', 'email' => 'mail@server.com', 'root' => [{ 'name' => 'N1', 'description' => 'D1' }] + }, @user_serializer.serializable_hash) + end + def test_associations_embedding_ids_including_objects_serialization_using_serializable_hash @association.include = true assert_equal({