Module: Sinatra::SimpleCache

Defined in:
lib/sinatra/simplecache.rb,
lib/sinatra/simplecache/version.rb

Constant Summary collapse

VERSION =
"0.0.1"

Instance Method Summary collapse

Instance Method Details

#cache(opts = {}, &block) ⇒ Object

Example.

For operation cache:
 @@users = MySQL.query("...").to_a
 //=> @@users = cache(key: "users", expire: 0.6) { MySQL.query("...").to_a }

For page cache:
 slim: index
 //=> cache(expire: 0.3) {slim: index}

For fragment cache:
  @@sidebar = cache(key: "sidebar", expire: 1) { slim: sidebar }
  slim :detail, :locales = { :sidebar => @@sidebar }


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/sinatra/simplecache.rb', line 20

def cache(opts={}, &block)
  @@entries ||= {}

  now = Time.now.to_f
  expire = opts[:expire] ? (opts[:expire] + now) : (@@inf ||= 1/0.0)
  key = opts[:key] || (defined?(Sinatra) && request.path) || abort("set key")

  if (e = @@entries[key]) && (e[:expire] > now)
    return e[:value]
  end

  value = block.call
  @@entries[key] = {
    expire: expire,
    value: value
  }
  value
end