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.



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

#clearObject



74
75
76
# File 'lib/action_view/template/resolver.rb', line 74

def clear
  @data.clear
end