@@ -12,27 +12,35 @@ module Serialization
1212 # @return [Transmutation::Serializer] The serialized object. This will respond to `#as_json` and `#to_json`.
1313 def serialize ( object , namespace : nil , serializer : nil , depth : 0 , max_depth : 1 )
1414 if object . respond_to? ( :map ) && !object . respond_to? ( :to_hash )
15- return object . map do |item |
16- serialize ( item , namespace :, serializer :, depth :, max_depth :)
17- end
15+ return object . map { |item | serialize ( item , namespace :, serializer :, depth :, max_depth :) }
1816 end
1917
20- lookup_serializer ( object , namespace :, serializer :)
21- . new ( object , depth :, max_depth :)
18+ lookup_serializer ( object , namespace :, serializer :) . new ( object , depth :, max_depth :)
2219 end
2320
2421 # Lookup the serializer for the given object.
2522 #
2623 # This calls {Transmutation::Serialization::Lookup#serializer_for} to find the serializer for the given object.
2724 #
25+ # This also caches the result for future lookups.
26+ #
2827 # @param object [Object] The object to lookup the serializer for.
2928 # @param namespace [String, Symbol, Module] The namespace to lookup the serializer in.
3029 # @param serializer [String, Symbol, Class] The serializer to use.
3130 #
3231 # @return [Class<Transmutation::Serializer>] The serializer for the given object.
3332 #
3433 def lookup_serializer ( object , namespace : nil , serializer : nil )
35- Lookup . new ( self , namespace :) . serializer_for ( object , serializer :)
34+ Serialization . cache [ [ self . namespace , object . class , namespace , serializer ] ] ||=
35+ Lookup . new ( self , namespace :) . serializer_for ( object , serializer :)
36+ end
37+
38+ def self . cache
39+ @cache ||= { }
40+ end
41+
42+ def namespace
43+ @namespace ||= self . class . name . split ( "::" ) [ ...-1 ] . join ( "::" )
3644 end
3745
3846 private_class_method def self . included ( base )
0 commit comments