Module: Twigg::Cacher

Extended by:
Dependency
Defined in:
lib/twigg/cacher.rb

Overview

The Cacher module is an abstraction around caching that offers two public methods, Cacher.get and Cacher.set.

If the twigg-cache gem is installed and enabled, delegates the storing of cached items to Memcached. In the absence of the gem, every cache lookup is treated as a miss.

Defined Under Namespace

Classes: DummyClient

Class Method Summary collapse

Class Method Details

.get(key, *args, &block) ⇒ Object

Gets stored value for ‘key`; in the event of a cache miss, yields to `block`, and caches and returns the result. `*args`, if present, are hashed and appended to key to permit the results of different calls to the same method to be conveniently stored and retrieved independently.

Note: if a ‘nil` or `false` value is ever stored in the cache, this method will consider any lookup of the corresponding key to be a miss, because we employ a simple truthiness check to determine presence.

Raises:

  • (ArgumentError)


28
29
30
31
32
# File 'lib/twigg/cacher.rb', line 28

def get(key, *args, &block)
  raise ArgumentError, 'block required by not given' unless block_given?
  digest = hashed_key_and_args(key, *args)
  client.get(digest) || set(key, *args, &block)
end

.set(key, *args, &block) ⇒ Object

Stores the result of yielding to ‘block` in the cache, with `key` as key, and returns the result.

As with get, any ‘*args`, if present, are hashed and appended to the key to premit the results of different calls to the same method to be conveniently stored and retrieved independently.



40
41
42
43
# File 'lib/twigg/cacher.rb', line 40

def set(key, *args, &block)
  digest = hashed_key_and_args(key, *args)
  yield.tap { |result| client.set(digest, result) }
end