class Gemmy::Components::Cache

Public Class Methods

new(db_name, hash={}) click to toggle source
# File lib/gemmy/patches_loaded/components/cache.rb, line 16
def initialize(db_name, hash={})
  cache_path = self.class.setup_cache_folder
  @db = hash.persisted "#{cache_path}/#{db_name}.yaml"
  # copy db state into memory
  @db.data.each { |k,v| self[k] = v.deep_dup }
end
setup_cache_folder() click to toggle source
# File lib/gemmy/patches_loaded/components/cache.rb, line 8
def self.setup_cache_folder
  cache_path = ENV["GEMMY_CACHE_PATH"] || "#{home}/gemmy/caches"
  unless Dir.exists?(cache_path)
    `mkdir -p #{cache_path}`
  end
  cache_path
end

Public Instance Methods

clear() click to toggle source
# File lib/gemmy/patches_loaded/components/cache.rb, line 68
def clear
  each_key &m(:delete)
  @db.clear
end
data() click to toggle source
# File lib/gemmy/patches_loaded/components/cache.rb, line 32
def data
  @db.data
end
dig_delete(*keys) click to toggle source

Delete functions like “dig_delete” I.e. if given a few keys as arguments, it will treat only the last as a delete key and all the rest as dig keys.

# File lib/gemmy/patches_loaded/components/cache.rb, line 47
def dig_delete(*keys)
  @db.dig_delete *keys
  key_to_delete = keys.pop
  if keys.empty?
    self.delete key_to_delete
  else
    self.dig(*keys).delete key_to_delete
  end
end
get(*keys) click to toggle source
# File lib/gemmy/patches_loaded/components/cache.rb, line 40
def get(*keys)
  @db.dig *keys
end
get_or_set(*keys, &blk) click to toggle source
# File lib/gemmy/patches_loaded/components/cache.rb, line 23
def get_or_set(*keys, &blk)
  result = get(*keys)
  if result.blank?
    result = blk.call
    set(*keys, result)
  end
  result
end
keys() click to toggle source
# File lib/gemmy/patches_loaded/components/cache.rb, line 36
def keys
  @db.data.keys
end
set(*keys, val) click to toggle source
# File lib/gemmy/patches_loaded/components/cache.rb, line 63
def set(*keys, val)
  Gemmy.patch("hash/i/bury").bury(self, *keys, val)
  @db.set(*keys, val)
end
set_state(hash) click to toggle source
# File lib/gemmy/patches_loaded/components/cache.rb, line 57
def set_state(hash)
  @db.set_state hash
  each_key &m(:delete)
  deep_merge! hash
end