Module: Ramaze::Helper::Cache
- Defined in:
- lib/ramaze/helper/cache.rb
Overview
Caching of simple objects and whole action responses.
Defined Under Namespace
Modules: SingletonMethods
Class Method Summary (collapse)
-
+ (Object) included(into)
Setup needed traits, add the singleton methods and add the caches used by this helper.
Instance Method Summary (collapse)
-
- (Object) cache_value(key = nil, options = {})
This method is used to access Ramaze::Cache.cache_helper_value.
-
- (String) cache_wrap(action) { ... }
The response body.
Class Method Details
+ (Object) included(into)
Setup needed traits, add the singleton methods and add the caches used by this helper.
16 17 18 19 20 21 |
# File 'lib/ramaze/helper/cache.rb', line 16 def self.included(into) into.extend(SingletonMethods) into.add_action_wrapper(6.0, :cache_wrap) into.trait[:cache_action] ||= Set.new Ramaze::Cache.add(:action, :cache_helper_value) end |
Instance Method Details
- (Object) cache_value(key = nil, options = {})
This method is used to access Ramaze::Cache.cache_helper_value. It provides an easy way to cache long-running computations, gathering external resources like RSS feeds or DB queries that are the same for every user of an application. This method changes behaviour if a block is passed, which can be used to do lazy computation of the cached value conveniently when using a custom TTL or longer expressions that don't fit on one line with ||=.
86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/ramaze/helper/cache.rb', line 86 def cache_value(key = nil, = {}) cache = Ramaze::Cache.cache_helper_value if key and block_given? if found = cache[key] found else cache.store(key, yield, ) end else cache end end |
- (String) cache_wrap(action) { ... }
Returns the response body
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/ramaze/helper/cache.rb', line 30 def cache_wrap(action) cache = Innate::Cache.action ancestral_trait[:cache_action].each do |cache_action| temp = cache_action.dup block = temp.delete(:key) ttl = temp.delete(:ttl) if temp.all?{|key, value| action[key] == value } cache_key = action.full_path cache_key << "_#{action.instance.instance_eval(&block).to_s}" if block if cached = cache[cache_key] action.[:content_type] = cached[:type] else cached = { :body => catch(:respond) { yield }, :type => response['Content-Type'] } if ttl cache.store(cache_key, cached, :ttl => ttl) else cache.store(cache_key, cached) end end return cached[:body] end end yield end |