Skip to content

Commit 14f465c

Browse files
authored
Merge pull request #2467 from Shopify/0-9-stable-lazy-serializer-list
[0.9 stable] Lazily compute possible serializer class names
2 parents 9f7222c + 4ed12fd commit 14f465c

File tree

1 file changed

+11
-13
lines changed

1 file changed

+11
-13
lines changed

lib/active_model/serializer.rb

+11-13
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,13 @@ def serializer_for(resource, options = {})
6868
ArraySerializer
6969
end
7070
else
71-
search_list = build_serializer_class_list(resource, options)
72-
result = search_list.map do |klass_name|
73-
Serializer.serializers_cache.fetch_or_store(klass_name) do
74-
_const_get(klass_name)
75-
end
76-
end
77-
78-
result.find { |serializer| !serializer.nil? }
71+
each_possible_serializer(resource, options) do |klass_name|
72+
serializer = Serializer.serializers_cache.fetch_or_store(klass_name) do
73+
_const_get(klass_name)
74+
end
75+
return serializer unless serializer.nil?
76+
end
77+
nil
7978
end
8079
end
8180

@@ -124,11 +123,10 @@ def strip_attribute(attr)
124123
attr
125124
end
126125

127-
def build_serializer_class_list(resource, options)
128-
list = []
129-
list << build_serializer_class(resource, options)
130-
list << build_serializer_class(resource, {})
131-
list << build_serializer_class(resource.class.name.demodulize, {})
126+
def each_possible_serializer(resource, options)
127+
yield build_serializer_class(resource, options)
128+
yield build_serializer_class(resource, {})
129+
yield build_serializer_class(resource.class.name.demodulize, {})
132130
end
133131

134132
def build_serializer_class(resource, options)

0 commit comments

Comments
 (0)