Class: FsCache

Inherits:
Object
  • Object
show all
Defined in:
lib/fscache.rb

Constant Summary collapse

VERSION =
"0.9.0"

Instance Method Summary collapse

Constructor Details

#initialize(path = nil, expire = 7, debug = false) ⇒ FsCache

Returns a new instance of FsCache.



10
11
12
13
14
15
16
# 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

Instance Method Details

#clearObject



66
67
68
69
70
71
72
73
# 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) ⇒ Boolean

Returns:

  • (Boolean)


20
21
22
23
24
25
# 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) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
# 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) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 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) ⇒ Object



44
45
46
47
48
49
50
51
# 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