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.
-
#cache_query(query) ⇒ Object
:nodoc:.
- #clear ⇒ Object
-
#initialize ⇒ Cache
constructor
A new instance of Cache.
- #inspect ⇒ Object
Constructor Details
#initialize ⇒ Cache
Returns a new instance of Cache.
53 54 55 56 |
# File 'lib/action_view/template/resolver.rb', line 53 def initialize @data = SmallCache.new(&KEY_BLOCK) @query_cache = SmallCache.new end |
Instance Method Details
#cache(key, name, prefix, partial, locals) ⇒ Object
Cache the templates returned by the block
63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/action_view/template/resolver.rb', line 63 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 |
#cache_query(query) ⇒ Object
:nodoc:
78 79 80 81 82 83 84 |
# File 'lib/action_view/template/resolver.rb', line 78 def cache_query(query) # :nodoc: if Resolver.caching? @query_cache[query] ||= canonical_no_templates(yield) else yield end end |
#clear ⇒ Object
86 87 88 89 |
# File 'lib/action_view/template/resolver.rb', line 86 def clear @data.clear @query_cache.clear end |
#inspect ⇒ Object
58 59 60 |
# File 'lib/action_view/template/resolver.rb', line 58 def inspect "#<#{self.class.name}:0x#{(object_id << 1).to_s(16)} keys=#{@data.size} queries=#{@query_cache.size}>" end |