Versionable

Super fast and easy versioning for models and associations. Do cache lookups using this fast version number instead of managing complex cache expiry.

Versionable is intended for versioning of a model or an association and doesn’t currently provide any means of caching version numbers for normal model instances.

Examples

# A simple User model with a User.cached_all method that returns all users 
# in the application. This method is cached and will automatically "expire" 
# whenever a record is saved or you call User.new_version.

class User < ActiveRecord::Base
  versionable :cache => Rails.cache

  after_save { new_version }

  def self.cached_all
    # reference version in cache keys
    Rails.cache.fetch("User.cached_all:#{version}") { all }
  end
end

>> User.cached_all    # initial cache miss and cache fill
>> User.cached_all    # cache hit

>> User.new_version   # => 1224985243
>> User.cached_all    # new cache miss and cache fill

>> User.first.save    # causing new_version to be called from after_save
>> User.cached_all    # new cache miss and cache fill

You can also use it on associations…

Install

As a Rails plugin.

./script/plugin install git://github.com/jqr/versionable.git

Prefer gems? Add this to your environment.rb and run the following command.

config.gem 'jqr-versionable', :lib => 'versionable', :source => 'http://gems.github.com'

$ rake gems:install
Homepage

github.com/jqr/versionable/tree/master

License

Copyright © 2008 Elijah Miller <[email protected]>, released under the MIT license.