Module: Arturo::FeatureCaching
- Defined in:
- lib/arturo/feature_caching.rb
Overview
To be extended by Arturo::Feature if you want to enable in-memory caching. NB: Arturo’s feature caching only works when using Arturo::Feature.to_feature or when using the helper methods in Arturo and Arturo::FeatureAvailability. NB: if you have multiple application servers, you almost certainly want to clear this cache after each request:
class ApplicationController < ActionController::Base
after_filter { Arturo::Feature.clear_feature_cache }
end
Alternatively, you could redefine Arturo::Feature.feature_cache to use a shared cache like Memcached.
Defined Under Namespace
Classes: Cache
Class Method Summary collapse
Instance Method Summary collapse
- #caches_features? ⇒ Boolean
-
#to_feature_with_caching(feature_or_symbol) ⇒ Object
Wraps Arturo::Feature.to_feature with in-memory caching.
-
#warm_cache! ⇒ Object
Warms the cache by fetching all ‘Feature`s and caching them.
Class Method Details
.extended(base) ⇒ Object
21 22 23 24 25 26 27 28 |
# File 'lib/arturo/feature_caching.rb', line 21 def self.extended(base) class <<base alias_method_chain :to_feature, :caching attr_accessor :cache_ttl, :feature_cache end base.cache_ttl = 0 base.feature_cache = Arturo::FeatureCaching::Cache.new end |
Instance Method Details
#caches_features? ⇒ Boolean
30 31 32 |
# File 'lib/arturo/feature_caching.rb', line 30 def caches_features? self.cache_ttl.to_i > 0 end |
#to_feature_with_caching(feature_or_symbol) ⇒ Object
Wraps Arturo::Feature.to_feature with in-memory caching.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/arturo/feature_caching.rb', line 35 def to_feature_with_caching(feature_or_symbol) if !caches_features? to_feature_without_caching(feature_or_symbol) elsif (feature_or_symbol.kind_of?(Arturo::Feature)) feature_cache.write(feature_or_symbol.symbol.to_sym, feature_or_symbol, :expires_in => cache_ttl) feature_or_symbol elsif (cached_feature = feature_cache.read(feature_or_symbol.to_sym)) cached_feature else symbol = feature_or_symbol.to_sym feature = to_feature_without_caching(symbol) feature_cache.write(symbol, feature, :expires_in => cache_ttl) feature end end |
#warm_cache! ⇒ Object
Warms the cache by fetching all ‘Feature`s and caching them. This is perfect for use in an initializer.
53 54 55 56 57 58 59 |
# File 'lib/arturo/feature_caching.rb', line 53 def warm_cache! raise "Cannot warm Feature Cache; caching is disabled" unless caches_features? all.each do |feature| feature_cache.write(feature.symbol.to_sym, feature, :expires_in => cache_ttl) end end |