Method: Tenjin::ContextHelper#cache_with

Defined in:
lib/tenjin.rb

#cache_with(cache_key, lifetime = nil) ⇒ Object

cache fragment data

ex.

kv_store = Tenjin::FileBaseStore.new("/var/tmp/myapp/dacache")
Tenjin::Engine.data_cache = kv_store
engine = Tenjin::Engine.new
    # or engine = Tenjin::Engine.new(:data_cache=>kv_store)
entries = proc { Entry.find(:all) }
html = engine.render("index.rbhtml", {:entries => entries})

index.rbhtml:

<html>
  <body>
    <?rb cache_with("entries/index", 5*60) do ?>
    <?rb   entries = @entries.call ?>
    <ul>
      <?rb for entry in entries ?>
      <li>${entry.title}</li>
      <?rb end ?>
    </ul>
    <?rb end ?>
  </body>
</html>


376
377
378
379
380
381
382
383
384
385
386
387
388
389
# File 'lib/tenjin.rb', line 376

def cache_with(cache_key, lifetime=nil)
  kv_store = self._engine.data_cache  or
    raise ArgumentError.new("data_cache object is not set for engine object.")
  data = kv_store.get(cache_key, self._template.timestamp)
  if data
    echo data
  else
    pos = self._buf.length
    yield
    data = self._buf[pos..-1]
    kv_store.set(cache_key, data, lifetime)
  end
  nil
end