From 0e7cae4d6d39024befdb9bd26e0683240d914a9d Mon Sep 17 00:00:00 2001 From: Josh Lane Date: Tue, 27 Jan 2015 11:37:35 -0800 Subject: [PATCH 1/2] pass context to ArraySerializer --- lib/active_model/array_serializer.rb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/active_model/array_serializer.rb b/lib/active_model/array_serializer.rb index e819de3d..78455537 100644 --- a/lib/active_model/array_serializer.rb +++ b/lib/active_model/array_serializer.rb @@ -15,17 +15,18 @@ module ActiveModel @object = object @scope = options[:scope] @root = options.fetch(:root, self.class._root) - @polymorphic = options.fetch(:polymorphic, false) + @polymorphic = options.fetch(:polymorphic, false) @meta_key = options[:meta_key] || :meta @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 + @context = options[:context] @namespace = options[:namespace] @key_format = options[:key_format] || options[:each_serializer].try(:key_format) end - attr_accessor :object, :scope, :root, :meta_key, :meta, :key_format + attr_accessor :object, :scope, :root, :meta_key, :meta, :key_format, :context def json_key key = root.nil? ? @resource_name : root @@ -35,7 +36,7 @@ module ActiveModel def serializer_for(item) serializer_class = @each_serializer || Serializer.serializer_for(item, namespace: @namespace) || DefaultSerializer - serializer_class.new(item, scope: scope, key_format: key_format, only: @only, except: @except, polymorphic: @polymorphic, namespace: @namespace) + serializer_class.new(item, scope: scope, key_format: key_format, context: @context, only: @only, except: @except, polymorphic: @polymorphic, namespace: @namespace) end def serializable_object(options={}) @@ -66,7 +67,7 @@ module ActiveModel private def instrumentation_keys - [:object, :scope, :root, :meta_key, :meta, :each_serializer, :resource_name, :key_format] + [:object, :scope, :root, :meta_key, :meta, :each_serializer, :resource_name, :key_format, :context] end end end From e0690862ceea31142f1b0d1a0dc919d30cfb5917 Mon Sep 17 00:00:00 2001 From: Josh Lane Date: Wed, 28 Jan 2015 11:38:54 -0800 Subject: [PATCH 2/2] test array serializer context --- .../array_serializer/options_test.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 test/unit/active_model/array_serializer/options_test.rb diff --git a/test/unit/active_model/array_serializer/options_test.rb b/test/unit/active_model/array_serializer/options_test.rb new file mode 100644 index 00000000..374442a7 --- /dev/null +++ b/test/unit/active_model/array_serializer/options_test.rb @@ -0,0 +1,16 @@ +require 'test_helper' + +module ActiveModel + class ArraySerializer + class OptionsTest < Minitest::Test + def test_custom_options_are_accessible_from_serializer + + 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], context: {foo: :bar}) + + assert_equal({foo: :bar}, serializer.context) + end + end + end +end