Looksy allows you to add a caching layer to any object that responds to the following methods:
- .all - returns a collection of objects
- #id - returns a unique identifier for an object
- #attributes - a hash containing attributes and their values which can be used to filter the collection of objects returned by the .all method.
Loosky was primarily designed to work with ActiveRecord models representing lookup tables in a database. It works by loading the collection, returned from the .all method, in cache and then filtering those records based on their attributes. If you think your collection is too big to store in cache then Looksy is not the right tool.
Add this line to your application's Gemfile:
gem 'looksy'
And then execute:
$ bundle
Or install it yourself as:
$ gem install looksy
Looksy was designed to work with ActiveRecord, but can work with any object that responds to .all, #id and #attributes. Simply include Looksy::Cacheable in the class that you want to cache.
class Category < ActiveRecord::Base
include Looksy::Cacheable
end
The Looksy::Cacheable module provides the following configuration methods:
class Category < ActiveRecord::Base
include Looksy::Cacheable
self.cache_store = MyCacheStore.new
self.cache_key = 'my_cache_store_key'
self.cache_options = { expires_in: 1.hour }
end
The configuration methods above do have defaults and so do not require setting:
cache_store
- defaults to Rails cache or an in-memory cachecache_key
- defaults to theclassname/all
cache_options
- defaults to an empty hash
class Category < ActiveRecord:Base
include Looksy::Cacheable
# attributes - id, name, parent_id, status
end
Assuming the class above here are the methods you have available to you:
Category.fetch_all
- returns the entire collectionCategory.fetch_first
- returns the first object in the collectionCategory.fetch_last
- returns the last object in the collectionCategory.fetch_by_id(id)
- returns the object matching the idCategory.fetch_all_by_status(status)
- returns a collection filtered by statusCategory.fetch_all_by_status_and_parent_id(status, parent_id)
- returns a collection filtered by status and parent idCategory.fetch_by_name(name)
- returns the first object matching the nameCategory.fetch_by_parent_id_and_status(parent_id, status)
- returns the first object matching the parent id and statusCategory.fetch_last_by_parent_id(parent_id)
- returns the last object matching the parent idCategory.fetch_last_by_parent_id_and_status(parent_id, status)
- returns the last object matching the parent id and status
All methods above, after fetch_by_id
, are dynamic methods that operate based on the attributes hash returned by an instance.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request