Sha256: 7b76c98286d98db74635e9c70ef6d38ff66c99594b2d6cce9dfb34e8f123c86a

Contents?: true

Size: 1.45 KB

Versions: 5

Compression:

Stored size: 1.45 KB

Contents

# -*- encoding : utf-8 -*-

class Card::Cache::Persistent
  attr_accessor :prefix

  class << self
    def database_name
      @database_name ||= (cfg = Cardio.config) &&
                         (dbcfg = cfg.database_configuration) &&
                         dbcfg[Rails.env]['database']
    end
  end

  def initialize opts
    @store = opts[:store]
    @klass = opts[:class]
    @class_key = @klass.to_s.to_name.key
    @database = opts[:database] || self.class.database_name
  end

  def renew
    @stamp = nil
    @prefix = nil
  end

  def reset
    @stamp = new_stamp
    @prefix = nil
    Cardio.cache.write stamp_key, @stamp
  end

  def stamp
    @stamp ||= Cardio.cache.fetch stamp_key { new_stamp }
  end

  def stamp_key
    "#{@database}/#{@class_key}/stamp"
  end

  def new_stamp
    Time.now.to_i.to_s 32
  end

  def prefix
    @prefix ||= "#{@database}/#{@class_key}/#{stamp}"
  end

  def full_key key
    "#{prefix}/#{key}"
  end

  def read key
    @store.read full_key(key)
  end

  def write_variable key, variable, value
    if @store && (object = read key)
      object.instance_variable_set "@#{variable}", value
      write key, object
    end
    value
  end

  def write key, value
    @store.write full_key(key), value
  end

  def fetch key, &block
    @store.fetch full_key(key), &block
  end

  def delete key
    @store.delete full_key(key)
  end

  def annihilate
    @store.clear
  end

  def exist? key
    @store.exist? full_key(key)
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
card-1.18.6 lib/card/cache/persistent.rb
card-1.18.5 lib/card/cache/persistent.rb
card-1.18.4 lib/card/cache/persistent.rb
card-1.18.3 lib/card/cache/persistent.rb
card-1.18.2 lib/card/cache/persistent.rb