15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/merb_piece_cache/helpers.rb', line 15
def piece_cache(cache_key, lifetime=nil)
template_path, linenum, funcname = called_from()
ts = File.exist?(template_path) && File.mtime(template_path)
cache_store = Merb::Plugins.config[:merb_piece_cache][:cache_store]
piece = cache_store.read(cache_key, :timestamp=>ts, :content_type=>self.content_type)
show_area = Merb::Plugins.config[:merb_piece_cache][:show_area]
if piece
Merb.logger.debug "[piece_cache] #{cache_key.inspect}: found."
@_erb_buf << "<div style=\"font-weight:bold\">----- cached key=#{cache_key.inspect} -----</div>\n" if show_area
@_erb_buf << piece
@_erb_buf << "<div style=\"font-weight:bold\">----- /cached -----</div>\n" if show_area
else
Merb.logger.debug "[piece_cache] #{cache_key.inspect}: expired or not found."
values = @_callback && @_callback.call(cache_key) || {}
@_erb_buf << "<div style=\"font-weight:bold;color:red\">----- rendered key=#{cache_key.inspect} -----</div>\n" if show_area
pos = @_erb_buf.length
yield(values)
piece = @_erb_buf[pos..-1]
@_erb_buf << "<div style=\"font-weight:bold;color:red\">----- /rendered -----</div>\n" if show_area
cache_store.write(cache_key, piece, :lifetime=>lifetime, :content_type=>self.content_type)
end
nil
end
|