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
-
#size ⇒ Object
Get the cache size.
Constructor Details
#initialize ⇒ Cache
Returns a new instance of Cache.
55 56 57 58 |
# File 'lib/action_view/template/resolver.rb', line 55 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
65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/action_view/template/resolver.rb', line 65 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:
80 81 82 83 84 85 86 |
# File 'lib/action_view/template/resolver.rb', line 80 def cache_query(query) # :nodoc: if Resolver.caching? @query_cache[query] ||= canonical_no_templates(yield) else yield end end |
#clear ⇒ Object
88 89 90 91 |
# File 'lib/action_view/template/resolver.rb', line 88 def clear @data.clear @query_cache.clear end |
#inspect ⇒ Object
60 61 62 |
# File 'lib/action_view/template/resolver.rb', line 60 def inspect "#<#{self.class.name}:0x#{(object_id << 1).to_s(16)} keys=#{@data.size} queries=#{@query_cache.size}>" end |
#size ⇒ Object
Get the cache size. Do not call this method. This method is not guaranteed to be here ever.
95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/action_view/template/resolver.rb', line 95 def size # :nodoc: size = 0 @data.each_value do |v1| v1.each_value do |v2| v2.each_value do |v3| v3.each_value do |v4| size += v4.size end end end end size + @query_cache.size end |