Cache manager and wrapper.
Provides a convenient wrapper around caches to keep method name confusion at a minimum while still having short and meaningful method names for every cache instance.
The default caching is specified in lib/innate.rb in the config section. At the time of writing it defaults to Innate::Cache::Memory but can be changed easily.
Configuration has to be done before Innate::setup_dependencies is being called.
Configuration:
Innate::Cache.options do |cache| cache.names = [:session, :user] cache.session = Innate::Cache::Marshal cache.user = Innate::Cache::YAML end
Usage for storing:
# Storing with a time to live (10 seconds) Innate::Cache.user.store(:manveru, "Michael Fellinger", :ttl => 10) # Storing indefinitely Innate::Cache.user[:Pistos] = "unknown" # or without :ttl argument Innate::Cache.user.store(:Pistos, "unknown")
Usage for retrieving:
# we stored this one for 10 seconds Innate::Cache.user.fetch(:manveru, 'not here anymore') # => "Michael Fellinger" sleep 11 Innate::Cache.user.fetch(:manveru, 'not here anymore') # => "not here anymore" Innate::Cache.user[:Pistos] # => "unknown" Innate::Cache.user.fetch(:Pistos) # => "unknown"
For more details and to find out how to implement your own cache please read the documentation of Innate::Cache::API
NOTE:
* Some caches might expose their contents for everyone else on the same system, or even on connected systems. The rule as usual is, not to cache sensitive information.
# File lib/innate/cache.rb, line 112 def self.add(*names) names.each{|name| register(new(name)) } end
# File lib/innate/cache.rb, line 76 def initialize(name, klass = nil) @name = name.to_s.dup.freeze klass ||= options[@name.to_sym] @instance = klass.new @instance.cache_setup( ENV['HOSTNAME'], ENV['USER'], 'pristine', @name ) end
Add accessors for cache
@param [Cache] cache
# File lib/innate/cache.rb, line 103 def self.register(cache) key = cache.name source = "def self.%s() @%s; end def self.%s=(o) @%s = o; end" % [key, key, key, key] self.class_eval(source, __FILE__, __LINE__) self.send("#{key}=", cache) end
# File lib/innate/cache.rb, line 116 def clear instance.cache_clear end
# File lib/innate/cache.rb, line 120 def delete(*keys) instance.cache_delete(*keys) end
# File lib/innate/cache.rb, line 124 def fetch(key, default = nil) instance.cache_fetch(key, default) end
# File lib/innate/cache.rb, line 129 def store(key, value, options = {}) instance.cache_store(key, value, options) end
Generated with the Darkfish Rdoc Generator 2.