From 280fd65db8c0940bee27a36e6de6ab0292c8a220 Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Mon, 26 Aug 2013 15:32:02 -0300 Subject: [PATCH] Allow to set key for associations through options --- lib/active_model/serializer/associations.rb | 4 ++-- test/unit/active_model/serializer/has_many_test.rb | 8 ++++++++ test/unit/active_model/serializer/has_one_test.rb | 8 ++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/active_model/serializer/associations.rb b/lib/active_model/serializer/associations.rb index 81977316..58289770 100644 --- a/lib/active_model/serializer/associations.rb +++ b/lib/active_model/serializer/associations.rb @@ -45,7 +45,7 @@ module ActiveModel class HasOne < Association def key - "#{name}_id" + @options[:key] || "#{name}_id" end def embedded_key @@ -55,7 +55,7 @@ module ActiveModel class HasMany < Association def key - "#{name.singularize}_ids" + @options[:key] || "#{name.singularize}_ids" end def embedded_key diff --git a/test/unit/active_model/serializer/has_many_test.rb b/test/unit/active_model/serializer/has_many_test.rb index 03b9df7c..32d1a166 100644 --- a/test/unit/active_model/serializer/has_many_test.rb +++ b/test/unit/active_model/serializer/has_many_test.rb @@ -10,6 +10,7 @@ module ActiveModel @association.include = false @association.embed = :ids @association.options[:root] = nil + @association.options[:key] = nil end def test_associations_definition @@ -30,6 +31,13 @@ module ActiveModel }, @post_serializer.as_json) end + def test_associations_embedding_ids_serialization_using_serializable_hash_and_key_from_options + @association.options[:key] = 'key' + assert_equal({ + 'title' => 'Title 1', 'body' => 'Body 1', 'key' => @post.comments.map { |c| c.object_id } + }, @post_serializer.serializable_hash) + end + def test_associations_embedding_objects_serialization_using_serializable_hash @association.embed = :objects 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 7a548a0f..8cf69eca 100644 --- a/test/unit/active_model/serializer/has_one_test.rb +++ b/test/unit/active_model/serializer/has_one_test.rb @@ -10,6 +10,7 @@ module ActiveModel @association.include = false @association.embed = :ids @association.options[:root] = nil + @association.options[:key] = nil end def test_associations_definition @@ -30,6 +31,13 @@ module ActiveModel }, @user_serializer.as_json) end + def test_associations_embedding_ids_serialization_using_serializable_hash_and_key_from_options + @association.options[:key] = 'key' + assert_equal({ + 'name' => 'Name 1', 'email' => 'mail@server.com', 'key' => @user.profile.object_id + }, @user_serializer.serializable_hash) + end + def test_associations_embedding_objects_serialization_using_serializable_hash @association.embed = :objects assert_equal({