Sha256: 9b8adf87dd3f53505d45dc8ad46b92de4f9d942f9c450bead14ed2b63d5cf8a5
Contents?: true
Size: 1.79 KB
Versions: 1
Compression:
Stored size: 1.79 KB
Contents
# encoding: UTF-8 module Bin class Store < Compatibility attr_reader :collection, :options def initialize(collection, options={}) @collection, @options = collection, options end def expires_in @expires_in ||= options[:expires_in] || 1.year end def write(key, value, options={}) super do expires = Time.now.utc + ((options && options[:expires_in]) || expires_in) raw = !!options[:raw] value = raw ? value : Marshal.dump(value) doc = {:_id => key, :value => value, :expires_at => expires, :raw => raw} collection.save(doc) end end def read(key, options=nil) super do if doc = collection.find_one(:_id => key, :expires_at => {'$gt' => Time.now.utc}) doc['raw'] ? doc['value'] : Marshal.load(doc['value']) end end end def delete(key, options=nil) super do collection.remove(:_id => key) end end def delete_matched(matcher, options=nil) super do collection.remove(:_id => matcher) end end def exist?(key, options=nil) super do !read(key, options).nil? end end def increment(key, amount=1) super do counter_key_upsert(key, amount) end end def decrement(key, amount=1) super do counter_key_upsert(key, -amount.abs) end end def clear collection.remove end def stats collection.stats end private def counter_key_upsert(key, amount) collection.update( {:_id => key}, { '$inc' => {:value => amount}, '$set' => { :expires_at => Time.now.utc + 1.year, :raw => true }, }, :upsert => true) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
bin-0.6 | lib/bin/store.rb |