====== README ====== $Release: $ About ----- merb_piece_cache is a Merb plug-in to cache html fragments. You can eliminate database access with this plugin. Currently only file-base cache store is provided. (Memory-base cache store may be provided in future.) Install ------- ### install gem $ sudo gem install merb_helpers_monkey ## add 'dependency "merb_piece_cache"' $ vi config/dependencies.rb This plugin requires 'called_from' library. If you install this plugin manually, don't forget to install 'called_from'. Example ------- * [controller] delay database access by if_not_cached() helper. * [template] specify cache area by cache_with() helper. controller: def index ## @user is necessary every time @user = User.current() ## @members is necessary only when cache is refreshed ## (block parameter is called only when cache is expired or not found) if_not_cached {|cache_key| @members = Members.all(:order=>[:created_at]) } render end template: <!-- rendered every time (because never cached) --> <% if @user %> Hello <%=h @user %>! <% else %> <a href="/login">Login</a> <% end %> <!-- rendered only when cache is expired or not found --> <% lifetime = 5*60 # sec, default is nil(=infinity) %> <% cache_with("members/index", lifetime) do %> <ul> <% for member in @members %> <li><%=h @member.name %></li> <% end %> <ul> <% end %> Reference --------- Merb_piece_cache plugin provides the following helpers. * if_not_cached() {|cache_key| ... } Register block as callback object which is called when fragment cache is re-generated (In other words, block parameter is called only when cache is re-generated). Block paramter can receive cache_key as 1st argument so that you can switch data processing according to cache_key. * piece_cache(cache_key, lifetime=nil) { ... } When cache is found and not expired, then add cache data into view. Otherwise, call block to re-generate cache data and cache it. (Notice that block parameter is called only when cache is re-generated.) It is able to specify cache lifetime. For example, if you specify lifetime=5*60, cache data will be expired after 5 minutes. * cache_with(cache_key, lifetime=nil) { ... } Alias of piece_cache(). You can re-define this helper to extend cache behaviour. Configuration ------------- You can configure merb_piece_cache plugin in your environment file. (config/environments/{production,development,test}.rb). For example, add the followings into your 'development.rb': Merb::Plugins.config[:merb_piece_cache] = { ## show cached area in template (convenient for debug!) :show_area => true, ## directory to place cache files (default: "MERB_ROOT/tmp/cache") :root_dir => "/var/tmp", } Tips ---- * You can prepare different data in if_not_exist() according to cache_key. def index if_not_cached {|cache_key| case cache_key when /^post\/(\d+)$/ @post = BlogPost.get($1) when /^post\/(\d+)/comments$/ @comments = BlogComment.all(:post_id=>$1) end } render end * piece_cache() (and also cache_with()) checks template timestamp. If cache data is older than template timestamp, then cache data will be re-generated. Author ------ makoto kuwata <kwa(at)kuwata-lab.com> copyright(c) 2009 kuwata-lab.com all rights reserved. License ------- MIT License
Project
merb_piece_cache
Merb plugin to cache html fragment
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
Dependencies
Runtime
>= 0.1.0
Project Readme