diff options
author | Xavier Noria <fxn@hashref.com> | 2012-12-01 04:38:36 -0800 |
---|---|---|
committer | Xavier Noria <fxn@hashref.com> | 2012-12-01 04:38:36 -0800 |
commit | 60edeceda3317043a43e3b9aa9087dec4b6a81fb (patch) | |
tree | 9a3f7c9fab2bfce6c1ceb136e72be133f58fc8df /guides | |
parent | 005d910624bbfa724b638426a000c8074d4201a2 (diff) | |
parent | 9ee0ffb3602720fceaecc2fbae1c932341482e31 (diff) | |
download | rails-60edeceda3317043a43e3b9aa9087dec4b6a81fb.tar.gz rails-60edeceda3317043a43e3b9aa9087dec4b6a81fb.tar.bz2 rails-60edeceda3317043a43e3b9aa9087dec4b6a81fb.zip |
Merge pull request #8246 from urielka/uriel-fixed-8167
Fix #8167 - adding autoloading support for caching
Diffstat (limited to 'guides')
-rw-r--r-- | guides/source/active_support_core_extensions.md | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/guides/source/active_support_core_extensions.md b/guides/source/active_support_core_extensions.md index e6f2db2a2d..9fca3d585b 100644 --- a/guides/source/active_support_core_extensions.md +++ b/guides/source/active_support_core_extensions.md @@ -3720,6 +3720,27 @@ The auxiliary file is written in a standard directory for temporary files, but y NOTE: Defined in `active_support/core_ext/file/atomic.rb`. +Extensions to `Marshal` +-------------------- + +### `load` + +Unpatched Marshal#load doesn't call constant_missing so in order to support ActiveSupport constant autoloading load is patched using alias_method_chain. + +The method accepts the same arguments as unpatched Marshal#load and the result of calling it will be the same. + +For example, ActiveSupport uses this method to read from cache(in FileStore): + +```ruby +File.open(file_name) { |f| Marshal.load(f) } +``` + +If Marshal#load didn't support constant autoloading then various caching stores wouldn't too. + +WARNING. If a IO (e.g. a file) is used as source it needs to respond to rewind (which a normal file does) because if an exception is raised calling the original Marshal#load the file will be exhausted. + +NOTE: Defined in `active_support/core_ext/marshal.rb`. + Extensions to `Logger` ---------------------- |