Sha256: ac91ab18793df1cfcb207849cbbe94bb8e459ba819d912f59725078d2157e8d0
Contents?: true
Size: 1.44 KB
Versions: 3
Compression:
Stored size: 1.44 KB
Contents
require 'catche/tag/object' require 'catche/tag/resource' module Catche module Tag KEY = 'catche' DIVIDER = '_' extend self def join(*tags) tags.flatten.compact.uniq.join(DIVIDER) end def tag!(key, *tags) tags.each do |tag| keys = fetch_tag(tag) key_tags = fetch_key(key) tag_key = stored_key(:tags, tag) key_key = stored_key(:keys, key) Catche.adapter.write(tag_key, keys << key) Catche.adapter.write(key_key, key_tags << tag_key) end end def expire!(*tags) expired_keys = [] tags.each do |tag| keys = fetch_tag(tag) expired_keys += keys keys.each do |key| # Expires the cached value Catche.adapter.delete key # Removes the tag from the tag list in case it's never used again Catche.adapter.write( stored_key(:keys, key), fetch_key(key).delete(stored_key(:tags, tag)) ) end Catche.adapter.delete stored_key(:tags, tag) end expired_keys end protected def fetch_tag(tag) Catche.adapter.read stored_key(:tags, tag), [] end def fetch_key(key) Catche.adapter.read stored_key(:keys, key), [] end def stored_key(scope, value) join_keys KEY, scope.to_s, value.to_s end def join_keys(*keys) keys.join('.') end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
catche-0.1.2 | lib/catche/tag.rb |
catche-0.1.1 | lib/catche/tag.rb |
catche-0.1.0 | lib/catche/tag.rb |