Instead of writing
class Post < ActiveRecord::Base
def expensive_method
@cached_expensive ||= _expensive_method
end
def _expensive_method
sleep 10
# blablabla
end
endnow you can write
class Post < ActiveRecord::Base
def expensive_method
sleep 10
# blablabla
end
acts_as_method_cacheable :methods => [:expensive_method]
endor cache method for an instance of Post only
post = Post.find xxx
post.cache_method(:expensive_method)
# post has_many comments
post.cache_method(:comments => :comment_expensive_method)This gem depends on ActiveSupport/ActiveRecord
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]
endpost = 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 # expensivepost = Post.find(xxx)
post.cache_method(:expensive_method)
post.expensive_method # expensive
post.expensive_method # cheap!
post.reset_cache(:expensive_method)
post.expensive_method # expensiveAdd 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
ONLY support method with no params
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
