class FsCache
Constants
- VERSION
Public Class Methods
new(path = nil, expire = 7, debug = false)
click to toggle source
# File lib/fscache.rb, line 10 def initialize(path = nil, expire = 7, debug = false) @file_cache_expire = expire @debug = debug default_tmp = defined?(Rails).nil? ? Pathname.new("/tmp").join('file_cache') : Rails.root.join('tmp').join('file_cache') @file_cache_dir = path.nil? ? default_tmp : path FileUtils::mkdir_p @file_cache_dir if !File.directory?(@file_cache_dir) end
Public Instance Methods
clear()
click to toggle source
# File lib/fscache.rb, line 66 def clear Dir["#{@file_cache_dir}/*"].each do |cache_name| # lets make sure we're only deleting files with md5 hashes as filenames. if cache_key( File.basename(cache_name) ) FileUtils.rm(cache_name) end end end
exist?(cache_name)
click to toggle source
# File lib/fscache.rb, line 20 def exist?(cache_name) cache_name = cache_key( cache_name ) cache_path = @file_cache_dir.join(cache_name) cache_valid(cache_path) end
fetch(cache_name) { || ... }
click to toggle source
# File lib/fscache.rb, line 54 def fetch(cache_name) cache_name = cache_key( cache_name ) if(exist? (cache_name) ) read (cache_name) else value = yield write(cache_name, value) read (cache_name) end end
read(cache_name)
click to toggle source
# File lib/fscache.rb, line 28 def read(cache_name) cache_name = cache_key( cache_name ) cache_path = @file_cache_dir.join(cache_name) if @debug p exist?(cache_name) ? "#{cache_name}: cache hit" : "#{cache_name}: cache miss" end if File.exist?(cache_path) YAML.load(File.read(cache_path)) else return false end end
write(cache_name, cache_value)
click to toggle source
# File lib/fscache.rb, line 44 def write(cache_name, cache_value) cache_name = cache_key( cache_name ) cache_path = @file_cache_dir.join(cache_name) File.open(cache_path, 'w') do |f| f.write(YAML.dump(cache_value)) end end
Private Instance Methods
cache_key(key)
click to toggle source
# File lib/fscache.rb, line 85 def cache_key(key) if(key.is_a?(String) && key.downcase.match(/^[a-f0-9]{32}$/) ) key else Digest::MD5.hexdigest(key.to_s).to_s end end
cache_valid(filename)
click to toggle source
——— private ———
# File lib/fscache.rb, line 77 def cache_valid(filename) if File.exist?(filename) ((Time.now - File.stat(filename).mtime).to_i / 86400.0).to_i < @file_cache_expire else return false end end