module CacheRocket
Constants
- ERROR_MISSING_KEY
- ERROR_MISSING_KEY_OR_BLOCK
- VERSION
Public Instance Methods
cache_replace(name = {}, options = {}, &block)
click to toggle source
This method works like Rails' CacheHelper#cache, plus it replaces content in the replace hash. It must have a `replace` option.
-
cache_replace
([“key1”, “key2”], replace: { name: “x” }) do .htmls= cache_replace_key :name
github.com/rails/rails/blob/master/actionview/lib/action_view/helpers/cache_helper.rb
# File lib/cache_rocket.rb, line 69 def cache_replace(name = {}, options = {}, &block) replace_hash = options.delete(:replace) raise(ArgumentError, ERROR_MISSING_KEY) unless replace_hash name_options = options.slice(:skip_digest, :virtual_path) safe_concat \ Fragment.new( fragment_for(cache_fragment_name(name, name_options), options, &block) ).replace(replace_hash).to_s.html_safe nil end
render_cached(partial, options = {}) { || ... }
click to toggle source
Supports 5 options:
-
Single partial to replace. “inner” is the key name and “_inner.*” is the partial file name.
render_cached "container", replace: "inner"
-
Array of partials to replace
render_cached "container", replace: ["inner"]
-
Map of keys to replace with values
render_cached "container", replace: {key_name: a_helper_method(object)}
-
Yield to a hash of keys to replace with values
render_cached "container" do {key_name: a_helper_method(object)} end
-
Render a collection with Procs for replace values.
render_cached "partial", collection: objects, replace: { key_name: ->(object){a_method(object)} }
# File lib/cache_rocket.rb, line 39 def render_cached(partial, options = {}) replace_hash = options.delete(:replace) collection = options.delete(:collection) fragment = Fragment.new(render(partial, options)) case replace_hash when Hash fragment.replace replace_hash, collection when NilClass raise(ArgumentError, ERROR_MISSING_KEY_OR_BLOCK) unless block_given? fragment.replace yield, collection else [*replace_hash].each do |key| fragment.gsub! cache_replace_key(key), render(key, options) end end fragment.to_s.html_safe end