From af34adc7b568fca724cfb9849cf24493e7d4afe7 Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Mon, 26 Aug 2013 15:43:59 -0300 Subject: [PATCH] Move key's initialization code to initializers --- lib/active_model/serializer/associations.rb | 30 +++++++++---------- .../active_model/serializer/has_many_test.rb | 12 +++++--- .../active_model/serializer/has_one_test.rb | 12 +++++--- 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/lib/active_model/serializer/associations.rb b/lib/active_model/serializer/associations.rb index 58289770..369b2eff 100644 --- a/lib/active_model/serializer/associations.rb +++ b/lib/active_model/serializer/associations.rb @@ -7,15 +7,17 @@ module ActiveModel @name = name @options = options - self.embed = options[:embed] - @embed_key = options[:embed_key] || :id - @include = options[:include] + self.embed = options[:embed] + @embed_key = options[:embed_key] || :id + @include = options[:include] + @key = options[:key] + @embedded_key = options[:root] self.serializer_class = @options[:serializer] end attr_reader :name, :embed_ids, :embed_objects, :embed_key, :serializer_class, :options - attr_accessor :include + attr_accessor :include, :key, :embedded_key alias embed_ids? embed_ids alias embed_objects? embed_objects alias include? include @@ -44,22 +46,18 @@ module ActiveModel end class HasOne < Association - def key - @options[:key] || "#{name}_id" - end - - def embedded_key - @options[:root] || name.pluralize + def initialize(*args) + super + @key ||= "#{name}_id" + @embedded_key ||= name.pluralize end end class HasMany < Association - def key - @options[:key] || "#{name.singularize}_ids" - end - - def embedded_key - @options[:root] || name + def initialize(*args) + super + @key ||= "#{name.singularize}_ids" + @embedded_key ||= 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 32d1a166..efab83e5 100644 --- a/test/unit/active_model/serializer/has_many_test.rb +++ b/test/unit/active_model/serializer/has_many_test.rb @@ -9,8 +9,6 @@ module ActiveModel @association = PostSerializer._associations[0] @association.include = false @association.embed = :ids - @association.options[:root] = nil - @association.options[:key] = nil end def test_associations_definition @@ -32,10 +30,13 @@ module ActiveModel end def test_associations_embedding_ids_serialization_using_serializable_hash_and_key_from_options - @association.options[:key] = 'key' + old_key = @association.key + @association.key = 'key' assert_equal({ 'title' => 'Title 1', 'body' => 'Body 1', 'key' => @post.comments.map { |c| c.object_id } }, @post_serializer.serializable_hash) + ensure + @association.key = old_key end def test_associations_embedding_objects_serialization_using_serializable_hash @@ -54,10 +55,13 @@ module ActiveModel def test_associations_embedding_objects_serialization_using_serializable_hash_and_root_from_options @association.embed = :objects - @association.options[:root] = 'root' + old_embedded_key = @association.embedded_key + @association.embedded_key = 'root' assert_equal({ 'title' => 'Title 1', 'body' => 'Body 1', 'root' => [{ 'content' => 'C1' }, { 'content' => 'C2' }] }, @post_serializer.serializable_hash) + ensure + @association.embedded_key = old_embedded_key end def test_associations_embedding_ids_including_objects_serialization_using_serializable_hash diff --git a/test/unit/active_model/serializer/has_one_test.rb b/test/unit/active_model/serializer/has_one_test.rb index 8cf69eca..2a34426b 100644 --- a/test/unit/active_model/serializer/has_one_test.rb +++ b/test/unit/active_model/serializer/has_one_test.rb @@ -9,8 +9,6 @@ module ActiveModel @association = UserSerializer._associations[0] @association.include = false @association.embed = :ids - @association.options[:root] = nil - @association.options[:key] = nil end def test_associations_definition @@ -32,10 +30,13 @@ module ActiveModel end def test_associations_embedding_ids_serialization_using_serializable_hash_and_key_from_options - @association.options[:key] = 'key' + old_key = @association.key + @association.key = 'key' assert_equal({ 'name' => 'Name 1', 'email' => 'mail@server.com', 'key' => @user.profile.object_id }, @user_serializer.serializable_hash) + ensure + @association.key = old_key end def test_associations_embedding_objects_serialization_using_serializable_hash @@ -54,10 +55,13 @@ module ActiveModel def test_associations_embedding_objects_serialization_using_serializable_hash_and_root_from_options @association.embed = :objects - @association.options[:root] = 'root' + old_embedded_key = @association.embedded_key + @association.embedded_key = 'root' assert_equal({ 'name' => 'Name 1', 'email' => 'mail@server.com', 'root' => [{ 'name' => 'N1', 'description' => 'D1' }] }, @user_serializer.serializable_hash) + ensure + @association.embedded_key = old_embedded_key end def test_associations_embedding_ids_including_objects_serialization_using_serializable_hash