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.
Class Method Details
.extended(base) ⇒ Object
19 20 21 22 23 24 25 26 27 |
# File 'lib/arturo/feature_caching.rb', line 19 def self.extended(base) class <<base alias_method_chain :to_feature, :caching attr_accessor :cache_ttl, :feature_cache, :nil_marker end base.cache_ttl = 0 base.feature_cache = Arturo::FeatureCaching::Cache.new base.nil_marker = Arturo::Feature.new end |
Instance Method Details
#caches_features? ⇒ Boolean
29 30 31 |
# File 'lib/arturo/feature_caching.rb', line 29 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.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/arturo/feature_caching.rb', line 34 def to_feature_with_caching(feature_or_symbol) if !self.caches_features? return to_feature_without_caching(feature_or_symbol) elsif (feature_or_symbol.kind_of?(Arturo::Feature)) feature_cache.write(feature_or_symbol.symbol, feature_or_symbol, :expires_in => cache_ttl) feature_or_symbol elsif (cached_feature = feature_cache.read(feature_or_symbol.to_sym)) cached_feature == nil_marker ? nil : cached_feature else f = to_feature_without_caching(feature_or_symbol) feature_cache.write(feature_or_symbol.to_sym, f.nil? ? nil_marker : f, :expires_in => cache_ttl) f end end |