From c8cfe94f299619382d2178344e99d6c6d0e02cb1 Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Thu, 2 Jan 2014 19:56:06 -0200 Subject: [PATCH] Allow to pass options to associations Closes #331 --- lib/active_model/serializer.rb | 4 ++-- test/fixtures/poro.rb | 5 +++++ test/unit/active_model/serializer/has_one_test.rb | 9 +++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index fb6b5ff7..7735436f 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -107,7 +107,7 @@ end @root = options.fetch(:root, self.class._root) @meta_key = options[:meta_key] || :meta @meta = options[@meta_key] - @options = options.reject{|k,v| [:scope, :root, :meta_key, :meta].include?(k) } + @options = options.reject{|k,v| [:root, :meta_key, :meta].include?(k) } end attr_accessor :object, :scope, :meta_key, :meta, :root, :options @@ -166,7 +166,7 @@ end def build_serializer(association) object = send(association.name) - association.build_serializer(object, scope: scope) + association.build_serializer(object, options) end def serialize(association) diff --git a/test/fixtures/poro.rb b/test/fixtures/poro.rb index a43954b5..07d1bbf7 100644 --- a/test/fixtures/poro.rb +++ b/test/fixtures/poro.rb @@ -50,6 +50,11 @@ class ProfileSerializer < ActiveModel::Serializer scope ? "#{description} - #{scope}" : description end + def name + name = object.read_attribute_for_serialization(:name) + options[:custom_name] ? "#{name} - #{options[:custom_name]}" : name + end + attributes :name, :description end diff --git a/test/unit/active_model/serializer/has_one_test.rb b/test/unit/active_model/serializer/has_one_test.rb index 059d2646..470c5a65 100644 --- a/test/unit/active_model/serializer/has_one_test.rb +++ b/test/unit/active_model/serializer/has_one_test.rb @@ -62,6 +62,15 @@ module ActiveModel }, @user_serializer.as_json) end + def test_allow_to_pass_options_to_associations + @user_serializer.options.merge!(custom_name: 'custom') + @association.embed = :objects + + assert_equal({ + 'user' => { name: 'Name 1', email: 'mail@server.com', profile: { name: 'N1 - custom', description: 'D1' } } + }, @user_serializer.as_json) + end + def test_associations_embedding_nil_ids_serialization_using_as_json @association.embed = :ids @user.instance_eval do