Skip to content

Commit a461389

Browse files
authored
Merge pull request #2073 from bf4/better_variables_in_serializer_lookup
Better variables; allow looking serializer from class
2 parents e325b32 + 47e82e0 commit a461389

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

lib/active_model/serializer.rb

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,18 @@ class Serializer
3434
# @param resource [ActiveRecord::Base, ActiveModelSerializers::Model]
3535
# @return [ActiveModel::Serializer]
3636
# Preferentially returns
37-
# 1. resource.serializer
37+
# 1. resource.serializer_class
3838
# 2. ArraySerializer when resource is a collection
3939
# 3. options[:serializer]
4040
# 4. lookup serializer when resource is a Class
41-
def self.serializer_for(resource, options = {})
42-
if resource.respond_to?(:serializer_class)
43-
resource.serializer_class
44-
elsif resource.respond_to?(:to_ary)
41+
def self.serializer_for(resource_or_class, options = {})
42+
if resource_or_class.respond_to?(:serializer_class)
43+
resource_or_class.serializer_class
44+
elsif resource_or_class.respond_to?(:to_ary)
4545
config.collection_serializer
4646
else
47-
options.fetch(:serializer) { get_serializer_for(resource.class, options[:namespace]) }
47+
resource_class = resource_or_class.class == Class ? resource_or_class : resource_or_class.class
48+
options.fetch(:serializer) { get_serializer_for(resource_class, options[:namespace]) }
4849
end
4950
end
5051

@@ -91,6 +92,8 @@ def self.get_serializer_for(klass, namespace = nil)
9192
serializer_class
9293
elsif klass.superclass
9394
get_serializer_for(klass.superclass)
95+
else
96+
nil # No serializer found
9497
end
9598
end
9699
end

0 commit comments

Comments
 (0)