Class: ActionView::Resolver::Cache
- Inherits:
-
Object
- Object
- ActionView::Resolver::Cache
- Defined in:
- lib/action_view/template/resolver.rb
Overview
Threadsafe template cache
Defined Under Namespace
Classes: SmallCache
Constant Summary collapse
- PARTIAL_BLOCK =
preallocate all the default blocks for performance/memory consumption reasons
lambda {|cache, partial| cache[partial] = SmallCache.new}
- PREFIX_BLOCK =
lambda {|cache, prefix| cache[prefix] = SmallCache.new(&PARTIAL_BLOCK)}
- NAME_BLOCK =
lambda {|cache, name| cache[name] = SmallCache.new(&PREFIX_BLOCK)}
- KEY_BLOCK =
lambda {|cache, key| cache[key] = SmallCache.new(&NAME_BLOCK)}
- NO_TEMPLATES =
usually a majority of template look ups return nothing, use this canonical preallocated array to save memory
[].freeze
Instance Method Summary collapse
-
#cache(key, name, prefix, partial, locals) ⇒ Object
Cache the templates returned by the block.
- #clear ⇒ Object
-
#initialize ⇒ Cache
constructor
A new instance of Cache.
Constructor Details
#initialize ⇒ Cache
Returns a new instance of Cache.
54 55 56 |
# File 'lib/action_view/template/resolver.rb', line 54 def initialize @data = SmallCache.new(&KEY_BLOCK) end |
Instance Method Details
#cache(key, name, prefix, partial, locals) ⇒ Object
Cache the templates returned by the block
59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/action_view/template/resolver.rb', line 59 def cache(key, name, prefix, partial, locals) if Resolver.caching? @data[key][name][prefix][partial][locals] ||= canonical_no_templates(yield) else fresh_templates = yield cached_templates = @data[key][name][prefix][partial][locals] if templates_have_changed?(cached_templates, fresh_templates) @data[key][name][prefix][partial][locals] = canonical_no_templates(fresh_templates) else cached_templates || NO_TEMPLATES end end end |
#clear ⇒ Object
74 75 76 |
# File 'lib/action_view/template/resolver.rb', line 74 def clear @data.clear end |