diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 6652ac44..de380336 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -140,6 +140,7 @@ module ActiveModel def initialize(object, options = {}) @object = object + @options = options @root = options[:root] || (self.class._root ? self.class.root_name : false) @meta = options[:meta] @meta_key = options[:meta_key] @@ -201,6 +202,8 @@ module ActiveModel private + attr_reader :options + def self.get_serializer_for(klass) serializer_class_name = "#{klass.name}Serializer" serializer_class = serializer_class_name.safe_constantize diff --git a/test/fixtures/poro.rb b/test/fixtures/poro.rb index 4fcd13ac..c42b48a3 100644 --- a/test/fixtures/poro.rb +++ b/test/fixtures/poro.rb @@ -45,6 +45,10 @@ class ProfileSerializer < ActiveModel::Serializer attributes :name, :description urls :posts, :comments + + def arguments_passed_in? + options[:my_options] == :accessible + end end class ProfilePreviewSerializer < ActiveModel::Serializer diff --git a/test/serializers/options_test.rb b/test/serializers/options_test.rb new file mode 100644 index 00000000..9b25cc7f --- /dev/null +++ b/test/serializers/options_test.rb @@ -0,0 +1,21 @@ +require 'test_helper' + +module ActiveModel + class Serializer + class OptionsTest < Minitest::Test + def setup + @profile = Profile.new(name: 'Name 1', description: 'Description 1') + end + + def test_options_are_accessible + @profile_serializer = ProfileSerializer.new(@profile, my_options: :accessible) + assert @profile_serializer.arguments_passed_in? + end + + def test_no_option_is_passed_in + @profile_serializer = ProfileSerializer.new(@profile) + refute @profile_serializer.arguments_passed_in? + end + end + end +end