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
-
.included(into) ⇒ Object
Setup needed traits, add the singleton methods and add the caches used by this helper.
Instance Method Summary collapse
-
#cache_value(key = nil, options = {}) ⇒ Object
This method is used to access Ramaze::Cache.cache_helper_value.
-
#cache_wrap(action) { ... } ⇒ String
The response body.
Class Method Details
.included(into) ⇒ Object
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
#cache_value(key = nil, options = {}) ⇒ Object
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 |
#cache_wrap(action) { ... } ⇒ String
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 |