@@ -27,6 +27,20 @@ class Serializer
2727 )
2828 /x
2929
30+ # Hashes contents of file for +_cache_digest+
31+ def self . digest_caller_file ( caller_line )
32+ serializer_file_path = caller_line [ CALLER_FILE ]
33+ serializer_file_contents = IO . read ( serializer_file_path )
34+ Digest ::MD5 . hexdigest ( serializer_file_contents )
35+ rescue TypeError , Errno ::ENOENT
36+ warn <<-EOF . strip_heredoc
37+ Cannot digest non-existent file: '#{ caller_line } '.
38+ Please set `::_cache_digest` of the serializer
39+ if you'd like to cache it.
40+ EOF
41+ '' . freeze
42+ end
43+
3044 with_options instance_writer : false , instance_reader : false do |serializer |
3145 class_attribute :_type , instance_reader : true
3246 class_attribute :_attributes
@@ -43,9 +57,10 @@ class Serializer
4357 end
4458
4559 def self . inherited ( base )
60+ caller_line = caller . first
4661 base . _attributes = _attributes . dup
4762 base . _attributes_keys = _attributes_keys . dup
48- base . _cache_digest = digest_caller_file ( caller . first )
63+ base . _cache_digest = digest_caller_file ( caller_line )
4964 super
5065 end
5166
@@ -105,12 +120,6 @@ def self.serializers_cache
105120 @serializers_cache ||= ThreadSafe ::Cache . new
106121 end
107122
108- def self . digest_caller_file ( caller_line )
109- serializer_file_path = caller_line [ CALLER_FILE ]
110- serializer_file_contents = IO . read ( serializer_file_path )
111- Digest ::MD5 . hexdigest ( serializer_file_contents )
112- end
113-
114123 # @api private
115124 def self . serializer_lookup_chain_for ( klass )
116125 chain = [ ]
0 commit comments