@@ -15,35 +15,34 @@ def defaults(action, value)
1515 end
1616 end
1717
18- def activate!
19- @load_options_cache = { }
20- @dump_options_cache = { }
21- instance . activate if instance . respond_to? ( :activate )
22- end
23-
2418 def load ( string , options = { } )
25- instance . load ( string , collect_load_options ( string , options ) . clone )
19+ instance . load ( string , collect_load_options ( options ) . clone )
2620 end
2721
2822 def dump ( object , options = { } )
29- instance . dump ( object , collect_dump_options ( object , options ) . clone )
23+ instance . dump ( object , collect_dump_options ( options ) . clone )
3024 end
3125
3226 protected
3327
34- def collect_load_options ( string , options )
35- @load_options_cache [ options ] ||= collect_options ( :load_options , options ) . merge ( options )
28+ def collect_load_options ( options )
29+ cache ( 'load' , options ) { collect_options ( :load_options , options ) . merge ( options ) }
3630 end
3731
38- def collect_dump_options ( object , options )
39- @dump_options_cache [ options ] ||= collect_options ( :dump_options , options ) . merge ( options )
32+ def collect_dump_options ( options )
33+ cache ( 'dump' , options ) { collect_options ( :dump_options , options ) . merge ( options ) }
4034 end
4135
4236 def collect_options ( method , *args )
4337 global , local = *[ MultiJson , self ] . map { |r | r . send ( method , *args ) }
4438 local . merge ( global )
4539 end
4640
41+ def cache ( method , options )
42+ cache_key = [ self , options ] . map ( &:hash ) . join + method
43+ MultiJson . cached_options [ cache_key ] ||= yield
44+ end
45+
4746 end
4847 end
4948end
0 commit comments