Lightly is a file cache for performing heavy tasks, lightly.
$ gem install lightlyOr with bundler:
gem 'lightly'Lightly can be used both as an instance, and as a static class.
require 'lightly'
# Instance
lightly = Lightly.new life: '3h'
response = lightly.get 'key' do
# Heavy operation here
end
# Static
Lightly.life = '3h'
response = Lightly.get 'key' do
# Heavy operation here
endThe design intention is to provide both a globally available singleton
Lightly object, as well as multiple caching instances, with different
settings - depending on the use case.
Note that the examples in this document are all using the instance syntax, but all methods are also available statically.
This is the basic usage pattern:
require 'lightly'
lightly = Lightly.new
content = lightly.get 'key' do
# Heavy operation here
entire_internet.download
endThis will look for a cached object with the given key and return it if it exists and not older than 1 hour. Otherwise, it will perform the operation inside the block, and save it to the cache object.
By default, the cached objects are stored in the ./cache directory, and
expire after 60 minutes. The cache directory will be created as needed.
In addition, the provided key is hashed to its MD5 representation, and the file permissions are optionally set.
You can change these settings on initialization:
lightly = Lightly.new dir: 'tmp/my_cache', life: 7200,
hash: false, permissions: 0o640Or later:
lightly = Lightly.new
lightly.dir = 'tmp/my_cache'
lightly.life = '1d'
lightly.hash = false
lightly.permissions = 0o640The life property accepts any of these formats:
lightly.life = 10 # 10 seconds
lightly.life = '20s' # 20 seconds
lightly.life = '10m' # 10 minutes
lightly.life = '10h' # 10 hours
lightly.life = '10d' # 10 daysTo check if a key is cached, use the cached? method:
lightly = Lightly.new
lightly.cached? 'example'
# => false
content = lightly.get 'example' do
open('http://example.com').read
end
lightly.cached? 'example'
# => trueYou can enable/disable the cache at any time:
lightly = Lightly.new
lightly.disable
lightly.enabled?
# => false
content = lightly.get 'example' do
open('http://example.com').read
end
lightly.cached? 'example'
# => false
lightly.enable
content = lightly.get 'example' do
open('http://example.com').read
end
lightly.cached? 'example'
# => trueTo flush the cache, call:
lightly = Lightly.new
lightly.flushTo clear the cache for a given key, call:
lightly = Lightly.new
lightly.clear 'example'To clear all expired keys, call:
lightly = Lightly.new
lightly.pruneIf your block returns false or nil, the data will not be cached:
result = lightly.get 'test' do
false
end
puts lightly.cached? 'test'
# => falseFor a similar gem that provides caching specifically for HTTP downloads, see the WebCache gem.
If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.