Instead of writing def expensive { @cached_expensive ||= original_expensive }, now you can write instance.cache_method(:expensive) instead. Also support nested cache method for associations. This gem depend on ActiveSupport/ActiveRecord
ONLY support method with no params
Add this line to your application's Gemfile:
gem 'acts_as_method_cacheable'
And then execute:
$ bundle
Or install it yourself as:
$ gem install acts_as_method_cacheable
NOTE!! MUST put acts_as_method_cacheable in the last of the class file
class Post < ActiveRecord::Base
def expensive_method
# balababa
end
acts_as_method_cacheable :methods => :expensive_method
end
post = Post.find(xxx)
post.cache_method(:expensive_method)
post.cache_method([:expensive_method1, :expensive_method2])
post = Post.find(xxx)
post.cache_method([:expensive_method3, :comments => :comment_expensive_method])
post = Post.find(xxx)
post.cache_method(:expensive_method)
post.expensive_method # expensive
post.expensive_method # cheap!
post.reload
post.expensive_method # expensive
post = Post.find(xxx)
post.cache_method(:expensive_method)
post.expensive_method # expensive
post.expensive_method # cheap!
post.reset_cache(:expensive_method)
post.expensive_method # expensive
You're highly welcome to improve this gem.
say you git clone the source code to /tmp/acts_as_method_cacheable
cd /tmp/acts_as_method_cacheable
bundle install
vi lib/acts_as_method_cacheable.rb
bundle exec rspec spec