From 3e8290a9237a95a31a49cffda995842a0dca3afb Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Fri, 4 Dec 2015 13:31:29 -0600 Subject: [PATCH] Serializer instance methods don't change; track at class level Per groyoh https://github.com/rails-api/active_model_serializers/pull/1356#discussion_r46713503 --- lib/active_model/serializer.rb | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 030e7c83..eadcb32e 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -184,6 +184,15 @@ module ActiveModel end end + def self._serializer_instance_method_defined?(name) + _serializer_instance_methods.include?(name) + end + + def self._serializer_instance_methods + @_serializer_instance_methods ||= (public_instance_methods - Object.public_instance_methods).to_set + end + private_class_method :_serializer_instance_methods + attr_accessor :object, :root, :scope # `scope_name` is set as :current_user by default in the controller. @@ -209,7 +218,7 @@ module ActiveModel end def read_attribute_for_serialization(attr) - if _serializer_method_defined?(attr) + if self.class._serializer_instance_method_defined?(attr) send(attr) elsif self.class._fragmented self.class._fragmented.read_attribute_for_serialization(attr) @@ -227,15 +236,5 @@ module ActiveModel protected attr_accessor :instance_options - - private - - def _serializer_instance_methods - @_serializer_instance_methods ||= (public_methods - Object.public_instance_methods).to_set - end - - def _serializer_method_defined?(name) - _serializer_instance_methods.include?(name) - end end end