class Drydock::ObjectCaches::FilesystemCache
Attributes
dir[R]
Public Class Methods
new(dir = "~/.drydock")
click to toggle source
# File lib/drydock/object_caches/filesystem_cache.rb, line 8 def initialize(dir = "~/.drydock") @dir = File.expand_path(File.join(dir.to_s, 'cache')) FileUtils.mkdir_p(@dir) end
Public Instance Methods
clear()
click to toggle source
# File lib/drydock/object_caches/filesystem_cache.rb, line 13 def clear begin FileUtils.remove_entry(@dir) true rescue => e Drydock.logger.error("Cannot clear #{self.class} at #{@dir.inspect}: #{e}") return false end end
fetch(key, &blk)
click to toggle source
# File lib/drydock/object_caches/filesystem_cache.rb, line 23 def fetch(key, &blk) filename = build_path(key) if File.exist?(filename) File.read(filename) else dirname = File.dirname(filename) FileUtils.mkdir_p(dirname) blk.call.tap do |contents| File.open(filename, 'w') do |file| file.write contents end end end end
get(key, &blk)
click to toggle source
# File lib/drydock/object_caches/filesystem_cache.rb, line 40 def get(key, &blk) filename = build_path(key) if File.exist?(filename) if blk.nil? File.read(filename) else File.open(filename) do |file| blk.call file end end else nil end end
key?(key)
click to toggle source
# File lib/drydock/object_caches/filesystem_cache.rb, line 55 def key?(key) File.exist?(build_path(key)) end
set(key, value = nil, &blk)
click to toggle source
# File lib/drydock/object_caches/filesystem_cache.rb, line 59 def set(key, value = nil, &blk) filename = build_path(key) dirname = File.dirname(filename) FileUtils.mkdir_p(dirname) File.open(filename, 'w') do |file| if blk.nil? file.write value else blk.call file end end nil end
Private Instance Methods
build_path(key)
click to toggle source
# File lib/drydock/object_caches/filesystem_cache.rb, line 78 def build_path(key) digest = Digest::SHA2.hexdigest(key) subdir1 = digest.slice(0, 2) subdir2 = digest.slice(2, 2) filename = digest.slice(4, digest.length - 4) File.join(dir, subdir1, subdir2, filename) end