Sha256: f4e4b624f6f824cd5fefb14d1806a3a12e08613c38b4c510151a49385bc04832
Contents?: true
Size: 1.27 KB
Versions: 2
Compression:
Stored size: 1.27 KB
Contents
require 'yaml' class DrawerStore def self.load(file) YAML.load_file(File.expand_path(file)) end def self.save(object, file) File.open(File.expand_path(file), 'w') do |f| YAML.dump(object, f) end end end class Drawer attr :cache attr :store def initialize(file, store = DrawerStore) @store = store @cache = store.load(file) || {} at_exit do save(file) end end def get(k) cache[k] or (set(k, yield) if block_given?) end def get_multi(*ks) ks.collect { |k| get(k) } end def set(k, v) cache[k] = v end def add(k, v) set(k, v) unless cache[k] end def remove(k) cache.delete(k) end def flush_all cache.clear end def inspect "Drawer count: #{cache.size}. Type 'cache' to view the content." end def save(file) store.save(@cache, file) end def self.open(file, &block) file = File.expand_path(file) drawer = Drawer.new(file) yield drawer if block_given? drawer end def self.open!(file) file = File.expand_path(file) create(file) open(file) end def self.create(file) unless File.exists?(file) FileUtils.mkdir_p File.dirname(file) FileUtils.touch(file) end end def self.remove(file) FileUtils.rm(file) end end
Version data entries
2 entries across 2 versions & 2 rubygems
Version | Path |
---|---|
soveran-drawer-0.0.7 | lib/drawer.rb |
drawer-0.0.7 | lib/drawer.rb |