#/usr/bin/ruby require 'fileutils' =begin Use cache like this c = ::Dms::Cache.new c.set_dir "directory" c.set_section "main" data = c.command(req){ puts "got data by request: "+req.to_s } =end module Dms class Cache def initialize @datadir = Dir.pwd+'/cache/' @section = false end def set_dir dir @datadir = dir end def set_section name s = (name.gsub(/[^-.a-z0-9\/]/,'_').sub(/^\//, '') rescue '') s = false if s=='' @section = s end def dirname @datadir+(@section ? @section+'/' : '') end def is_in? fn File.file?(self.dirname+fn) end def get fn return false unless self.is_in?(fn) return File.read(self.dirname+fn) end def put file, data fn = self.dirname+file reg = fn.match /^(.*)\/.*?$/ FileUtils.mkdir_p(reg[1]) unless File.directory?(reg[1]) File.write(fn, data) end def filename name (name.gsub(/[^-.a-z0-9]/,'_').sub(/^_/, '') rescue '').sub(/^$/,'__root_dir') end def command name raise 'Missing block' unless block_given? file = filename name return self.get(file) if self.is_in?(file) data = yield self.put file, data data end end end