From e3ab34dd7427f6d2c6d18b8436e77e4420f057a5 Mon Sep 17 00:00:00 2001 From: Tema Bolshakov Date: Mon, 18 Aug 2014 14:21:08 +0400 Subject: [PATCH] Array serializer pass except and only options to item serializers --- lib/active_model/array_serializer.rb | 4 +++- .../array_serializer/except_test.rb | 18 ++++++++++++++++++ .../active_model/array_serializer/only_test.rb | 18 ++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 test/unit/active_model/array_serializer/except_test.rb create mode 100644 test/unit/active_model/array_serializer/only_test.rb diff --git a/lib/active_model/array_serializer.rb b/lib/active_model/array_serializer.rb index 8a42e18a..846a9e95 100644 --- a/lib/active_model/array_serializer.rb +++ b/lib/active_model/array_serializer.rb @@ -19,6 +19,8 @@ module ActiveModel @meta = options[@meta_key] @each_serializer = options[:each_serializer] @resource_name = options[:resource_name] + @only = options[:only] ? Array(options[:only]) : nil + @except = options[:except] ? Array(options[:except]) : nil @key_format = options[:key_format] || options[:each_serializer].try(:key_format) end attr_accessor :object, :scope, :root, :meta_key, :meta, :key_format @@ -30,7 +32,7 @@ module ActiveModel def serializer_for(item) serializer_class = @each_serializer || Serializer.serializer_for(item) || DefaultSerializer - serializer_class.new(item, scope: scope, key_format: key_format) + serializer_class.new(item, scope: scope, key_format: key_format, only: @only, except: @except) end def serializable_object diff --git a/test/unit/active_model/array_serializer/except_test.rb b/test/unit/active_model/array_serializer/except_test.rb new file mode 100644 index 00000000..e8125d8e --- /dev/null +++ b/test/unit/active_model/array_serializer/except_test.rb @@ -0,0 +1,18 @@ +require 'test_helper' + +module ActiveModel + class ArraySerializer + class ExceptTest < Minitest::Test + def test_array_serializer_pass_except_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, except: [:description]) + + expected = [{ name: 'Name 1' }, + { name: 'Name 2' }] + + assert_equal expected, serializer.serializable_array + end + end + end +end diff --git a/test/unit/active_model/array_serializer/only_test.rb b/test/unit/active_model/array_serializer/only_test.rb new file mode 100644 index 00000000..2825a258 --- /dev/null +++ b/test/unit/active_model/array_serializer/only_test.rb @@ -0,0 +1,18 @@ +require 'test_helper' + +module ActiveModel + class ArraySerializer + class OnlyTest < Minitest::Test + def test_array_serializer_pass_only_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, only: [:name]) + + expected = [{ name: 'Name 1' }, + { name: 'Name 2' }] + + assert_equal expected, serializer.serializable_array + end + end + end +end