Sha256: b4f442d5667f2de7e55a17f74d2d5a018006caf08a2967895d645abe720d86d6

Contents?: true

Size: 1.96 KB

Versions: 9

Compression:

Stored size: 1.96 KB

Contents

require 'digest/md5'
require 'base64'
class Cachetastic::Adapters::FileBase < Cachetastic::Adapters::Base
  
  attr_reader :directory
  attr_reader :hashed_keys
  
  def setup
    @directory = File.join(self.store_options["dir"], self.name.to_s)
    FileUtils.mkdir_p(self.directory, :verbose => self.debug?)
    @hashed_keys = {}
  end
  
  def valid?
    File.exists?(self.directory)
  end
  
  def stats
    super
    num_files = num_directories = file_size = 0
    everything = Dir.glob("#{self.directory}/**/*")
    everything.reject{|x| x =~ /^\./}.each do |entry|
      if ::File.directory?(entry)
        num_directories +=  1
      else
        file_size += ::File.size(entry)
        num_files += 1
      end
    end
    puts "Number of Files: #{num_files}\nNumber of Directories: #{num_directories}\nTotal Size on Disk: #{file_size/1024.to_f} KB\n\n"
  end
  
  def delete(key, delay = 0)
    if delay <= 0
      FileUtils.rm_rf(get_key_directoy(key), :verbose => self.debug?)
    else
      so = self.get(key)
      if so
        self.set(so.key, so.value, delay)
      end
    end
  end
  
  def expire_all
    FileUtils.rm_rf(self.directory, :verbose => self.debug?)
    setup
  end
  
  protected
  def store_file_name
    return "cachetastic.data"
  end
  
  private
  def directory_from_key(key)
    hkey = Base64.encode64(Digest::MD5.digest(key))
    hkey.gsub!("==\n", "")
    i = 0
    path = ""
    until i >= hkey.length do
      path = File.join(path, hkey[i..i+2])
      i += 3
    end
    path
  end
  
  def full_path_from_key(key)
    full_path_from_dir(get_key_directoy(key))
  end
  
  def full_path_from_dir(dir)
    File.join(dir, store_file_name)
  end
  
  def get_key_directoy(key, mkdir = true)
    hkey = self.hashed_keys[key.to_sym]
    if hkey.nil?
      path = File.join(self.directory, directory_from_key(key))
      self.hashed_keys[key.to_sym] = path
      hkey = path
    end
    FileUtils.mkdir_p(hkey, :verbose => self.debug?) if mkdir
    hkey
  end
  
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
cachetastic-1.4.1 lib/adapters/cachetastic_adapters_file_base.rb
cachetastic-1.5.0 lib/adapters/cachetastic_adapters_file_base.rb
cachetastic-1.6.0 lib/adapters/cachetastic_adapters_file_base.rb
cachetastic-1.7.0 lib/adapters/cachetastic_adapters_file_base.rb
cachetastic-1.7.3 lib/adapters/cachetastic_adapters_file_base.rb
cachetastic-1.7.4 lib/adapters/cachetastic_adapters_file_base.rb
cachetastic-1.4.2 lib/adapters/cachetastic_adapters_file_base.rb
cachetastic-1.7.2 lib/adapters/cachetastic_adapters_file_base.rb
cachetastic-1.4.0 lib/adapters/cachetastic_adapters_file_base.rb