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

Returns a new instance of Disk.



239
240
241
242
# File 'lib/rack/cache/meta_store.rb', line 239

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.



237
238
239
# File 'lib/rack/cache/meta_store.rb', line 237

def root
  @root
end

Class Method Details

.resolve(uri) ⇒ Object



282
283
284
285
# File 'lib/rack/cache/meta_store.rb', line 282

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

Instance Method Details

#purge(key) ⇒ Object



262
263
264
265
266
267
268
# File 'lib/rack/cache/meta_store.rb', line 262

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

#read(key) ⇒ Object



244
245
246
247
248
249
# File 'lib/rack/cache/meta_store.rb', line 244

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

#write(key, entries, ttl = nil) ⇒ Object



251
252
253
254
255
256
257
258
259
260
# File 'lib/rack/cache/meta_store.rb', line 251

def write(key, entries, ttl = nil)
  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