Class: ActionView::Resolver::Cache

Inherits:
Object
  • Object
show all
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

Constructor Details

#initializeCache

Returns a new instance of Cache.



90
91
92
93
# File 'lib/action_view/template/resolver.rb', line 90

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



100
101
102
# File 'lib/action_view/template/resolver.rb', line 100

def cache(key, name, prefix, partial, locals)
  @data[key][name][prefix][partial][locals] ||= canonical_no_templates(yield)
end

#cache_query(query) ⇒ Object

:nodoc:



104
105
106
# File 'lib/action_view/template/resolver.rb', line 104

def cache_query(query) # :nodoc:
  @query_cache[query] ||= canonical_no_templates(yield)
end

#clearObject



108
109
110
111
# File 'lib/action_view/template/resolver.rb', line 108

def clear
  @data.clear
  @query_cache.clear
end

#inspectObject



95
96
97
# File 'lib/action_view/template/resolver.rb', line 95

def inspect
  "#{to_s[0..-2]} keys=#{@data.size} queries=#{@query_cache.size}>"
end

#sizeObject

Get the cache size. Do not call this method. This method is not guaranteed to be here ever.



115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/action_view/template/resolver.rb', line 115

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