Module: ProstoCache
- Defined in:
- lib/prosto_cache/prosto_model_cache.rb,
lib/prosto_cache/extensions.rb,
lib/prosto_cache/prosto_hash.rb
Overview
This library provides a simple way to cache model and to access this cache in some canonical way. Any changes to the model’s objects will automatically result in cache reload. Cache reload in other ruby processes of same app will be triggered as well, but with some delay (currently up to 60 seconds). If the delay in cache reloading is not an option, well, this simple library will not work for you, and you will have to use something fancier, like Memcached.
Usage:
-
Add ProstoCache mixin to your model class YourModel < ActiveRecord::Base
include ProstoCache -
Configure cache access keys (optional step, by default cache is accessed by key ‘name’) cache_accessor_keys %w(scope name)
-
Your model must have non-nullable column updated_at, add it in migration if it is missing (this field is used for invalidating cache in other ruby processes).
-
Access cached model object in your code like this Simple case of one key
YourModel.cache[:key1]Case of 2 or more keys
YourModel.cache[:key1, :key2, :key3] -
Handling of non-existing cache values. If cache is accessed using symbol key and value not found, it will raise BadCacheKeyError. If cache is accessed using string key and value not found, it will return nil. For complex keys type of last key component is the one taken into account.
-
If you want to, you can add extra lookup helpers to the objects that relate to the cached object, that will allow those objects to update ‘string’ attribute, and that will result in database reference change.
class OtherModel < ActiveRecord::Base belongs_to :your_model lookup_enum_for :your_model endThis lookup was intertionally not integrated ‘seamlessly’ with ActiveRecord since not everybody would want that, and monkey-patching other library (AR) is not really a good thing, even if it results in a ‘smoother’ experience where everything works as if by magic.
Defined Under Namespace
Modules: Extensions Classes: BadCacheKeyError, BadCacheValuesError, ProstoHash, ProstoModelCache
Class Method Summary collapse
Class Method Details
.fail_on_missing_value?(litmus) ⇒ Boolean
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/prosto_cache/prosto_hash.rb', line 33 def self.fail_on_missing_value?(litmus) case litmus when Symbol true when String false else raise ArgumentError, "Unknown type of cache key #{litmus.inspect}" end end |
.included(cl) ⇒ Object
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 |
# File 'lib/prosto_cache/prosto_model_cache.rb', line 210 def self.included(cl) cl.after_save { cl.cache.invalidate } class << cl def cache @cache ||= ProstoModelCache.new self, @accessor_keys, @sort_keys end def cache_accessor_keys(keys) @accessor_keys = keys end def cache_sort_keys(keys) @sort_keys = keys end end end |