Sha256: 9e58a0cae0f4c9f7c302c262cba1b0e5446645bbc62d85c3302627df62fe4cca
Contents?: true
Size: 1.87 KB
Versions: 3
Compression:
Stored size: 1.87 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={}) key = key.to_s super do expires = Time.now.utc + ((options && options[:expires_in]) || expires_in) raw = !!options[:raw] value = raw ? value : BSON::Binary.new(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.to_s, :expires_at => {'$gt' => Time.now.utc}) doc['raw'] ? doc['value'] : Marshal.load(doc['value'].to_s) end end end def delete(key, options=nil) super do collection.remove(:_id => key.to_s) 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) key = key.to_s 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
3 entries across 3 versions & 2 rubygems
Version | Path |
---|---|
honkster-bin-0.6.3.1 | lib/bin/store.rb |
honkster-bin-0.6.3 | lib/bin/store.rb |
bin-0.6.3 | lib/bin/store.rb |