Sha256: d0e471bc23dfa9d4b72532403015803cfb8f15eec154e022ab1a25b51e4fd633
Contents?: true
Size: 1.49 KB
Versions: 1
Compression:
Stored size: 1.49 KB
Contents
require "digest/md5" require "json" module Cachew # Base class for Cachew adapters. # # @example Building custom adapters # # class Cachew::Redis < Cache::Adapter # def initialize(client) # @client = client # end # # private # # def __set__(key, val, ttl) # val = Marshal.dump val # # if 0 == ttl # @client.set key, val # else # @client.setex key, val, ttl # end # end # # def __get__(key) # val = @client.get(key) # val ? Marshal.load(val) : UNDEFINED # end # # def __key__(*) # "cachew:#{super}" # end # end # class Adapter # Internal constant used by `__get__` to notify that value is not in the # cache or became stale UNDEFINED = Object.new.freeze # @example Usage # # cachew.fetch "some_key", :ttl => 60 do # HTTP.get("http://example.com").to_s # end # def fetch(key, opts = {}) key = __key__ key, opts val = __get__ key if UNDEFINED.equal? val val = yield ttl = opts.fetch(:ttl) { 0 }.to_i __set__ key, val, ttl end val end private # :nodoc: def __set__(_key, _val, _ttl) fail "Not implemented" end # :nodoc: def __get__(_key) fail "Not implemented" end # :nodoc: def __key__(*args) Digest::MD5.hexdigest JSON.dump args end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
cachew-0.2.0 | lib/cachew/adapter.rb |