From 8006529e206385676b19d5affb69d11f60ad8632 Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Sat, 14 Sep 2013 22:25:59 -0300 Subject: [PATCH] Allow ArraySerializer to pass the options down to item serializers --- lib/active_model/array_serializer.rb | 2 +- .../array_serializer/scope_test.rb | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 test/unit/active_model/array_serializer/scope_test.rb diff --git a/lib/active_model/array_serializer.rb b/lib/active_model/array_serializer.rb index 471d7f4a..16145a05 100644 --- a/lib/active_model/array_serializer.rb +++ b/lib/active_model/array_serializer.rb @@ -25,7 +25,7 @@ module ActiveModel def serializable_array @object.map do |item| serializer = @options[:each_serializer] || Serializer.serializer_for(item) || DefaultSerializer - serializer.new(item).serializable_object(@options.merge(root: nil)) + serializer.new(item, @options.merge(root: nil)).serializable_object end end alias serializable_object serializable_array diff --git a/test/unit/active_model/array_serializer/scope_test.rb b/test/unit/active_model/array_serializer/scope_test.rb new file mode 100644 index 00000000..60efa440 --- /dev/null +++ b/test/unit/active_model/array_serializer/scope_test.rb @@ -0,0 +1,24 @@ +require 'test_helper' + +module ActiveModel + class ArraySerializer + class ScopeTest < ActiveModel::TestCase + def test_array_serializer_pass_options_to_items_serializers + array = [Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }), + Profile.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' })] + serializer = ArraySerializer.new(array, scope: current_user) + + expected = [{'name' => 'Name 1', 'description' => 'Description 1 - user'}, + {'name' => 'Name 2', 'description' => 'Description 2 - user'}] + + assert_equal expected, serializer.serializable_array + end + + private + + def current_user + 'user' + end + end + end +end