Sha256: 9fa066554c62d34beeb2ded8f2e916a19110f8323f35db1f5cbfe815ff934f35
Contents?: true
Size: 1.26 KB
Versions: 1
Compression:
Stored size: 1.26 KB
Contents
require "digest/md5" require "fileutils" require "ruco/core_ext/file" module Ruco class FileStore def initialize(folder, options={}) @folder = folder @options = options end def set(key, value) FileUtils.mkdir_p @folder unless File.exist? @folder File.write(file(key), serialize(value)) cleanup if @options[:keep] end def get(key) file = file(key) deserialize File.binary_read(file) if File.exist?(file) end def cache(key, &block) value = get(key) if value.nil? value = yield set(key, value) end value end def delete(key) FileUtils.rm(file(key)) rescue Errno::ENOENT end def clear FileUtils.rm_rf(@folder) end def file(key) "#{@folder}/#{Digest::MD5.hexdigest(key)}.yml" end private def entries (Dir.entries(@folder) - ['.','..']). map{|entry| File.join(@folder, entry) }. sort_by{|file| File.mtime(file) } end def cleanup delete = entries[0...-@options[:keep]] || [] delete.each{|f| File.delete(f) } end def serialize(value) @options[:string] ? value : Marshal.dump(value) end def deserialize(value) Marshal.load(value) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ruco-0.2.0.beta7 | lib/ruco/file_store.rb |