Class: Rack::Cache::MetaStore::Disk

Inherits:
Rack::Cache::MetaStore show all
Defined in:
lib/rack/cache/meta_store.rb

Overview

Concrete MetaStore implementation that stores request/response pairs on disk.

Constant Summary

Constants inherited from Rack::Cache::MetaStore

DISK, FILE, GAE, GAECACHE, HEAP, MEM, MEMCACHE, MEMCACHED

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Rack::Cache::MetaStore

#cache_key, #invalidate, #lookup, #store

Constructor Details

#initialize(root = "/tmp/rack-cache/meta-#{ARGV[0]}") ⇒ Disk



227
228
229
230
# File 'lib/rack/cache/meta_store.rb', line 227

def initialize(root="/tmp/rack-cache/meta-#{ARGV[0]}")
  @root = File.expand_path(root)
  FileUtils.mkdir_p(root, :mode => 0755)
end

Instance Attribute Details

#rootObject (readonly)

Returns the value of attribute root.



225
226
227
# File 'lib/rack/cache/meta_store.rb', line 225

def root
  @root
end

Class Method Details

.resolve(uri) ⇒ Object



270
271
272
273
# File 'lib/rack/cache/meta_store.rb', line 270

def self.resolve(uri)
  path = File.expand_path(uri.opaque || uri.path)
  new path
end

Instance Method Details

#purge(key) ⇒ Object



250
251
252
253
254
255
256
# File 'lib/rack/cache/meta_store.rb', line 250

def purge(key)
  path = key_path(key)
  File.unlink(path)
  nil
rescue Errno::ENOENT, IOError
  nil
end

#read(key) ⇒ Object



232
233
234
235
236
237
# File 'lib/rack/cache/meta_store.rb', line 232

def read(key)
  path = key_path(key)
  File.open(path, 'rb') { |io| Marshal.load(io) }
rescue Errno::ENOENT, IOError
  []
end

#write(key, entries) ⇒ Object



239
240
241
242
243
244
245
246
247
248
# File 'lib/rack/cache/meta_store.rb', line 239

def write(key, entries)
  tries = 0
  begin
    path = key_path(key)
    File.open(path, 'wb') { |io| Marshal.dump(entries, io, -1) }
  rescue Errno::ENOENT, IOError
    Dir.mkdir(File.dirname(path), 0755)
    retry if (tries += 1) == 1
  end
end