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