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.



53
54
55
# File 'lib/action_view/template/resolver.rb', line 53

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



58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/action_view/template/resolver.rb', line 58

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



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

def clear
  @data.clear
end