Sha256: 62f6f9746f00529c99664c7ce825e6f1561135e90ec8ad99f8482541351e1221
Contents?: true
Size: 1.68 KB
Versions: 2
Compression:
Stored size: 1.68 KB
Contents
require 'rubygems' require 'active_record' require 'memcache_extended' module CacheVersion def self.db if @db.nil? @db = ActiveRecord::Base.connection @db = @db.send(:master) if defined?(DataFabric::ConnectionProxy) and @db.kind_of?(DataFabric::ConnectionProxy) end @db end def self.cache CACHE end def self.get(key) key = key.to_s version_by_key[key] ||= CACHE.get_or_set(cache_key(key)) do db.select_value("SELECT version FROM cache_versions WHERE key = '#{key}'").to_i end end def self.increment(key) key = key.to_s if get(key) == 0 db.execute("INSERT INTO cache_versions (key, version) VALUES ('#{key}', 1)") else db.execute("UPDATE cache_versions SET version = version + 1 WHERE key = '#{key}'") end invalidate_cache(key) get(key) end def self.invalidate_cache(key) key = key.to_s cache.delete(cache_key(key)) version_by_key.delete(key) end def self.clear_cache @version_by_key = {} end private def self.version_by_key @version_by_key ||= {} end def self.cache_key(key) "v:#{key}" end end class Module def version(context = nil) key = [self, context].compact.join('_') CacheVersion.get(key) end def increment_version(context = nil) key = [self, context].compact.join('_') CacheVersion.increment(key) end end class CacheVersionMigration < ActiveRecord::Migration def self.up create_table :cache_versions, :id => false do |t| t.column :key, :string t.column :version, :integer, :default => 0 end add_index :cache_versions, :key, :unique => true end def self.down drop_table :cache_versions end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ninjudd-cache_version-0.9.3 | lib/cache_version.rb |
ninjudd-cache_version-0.9.4 | lib/cache_version.rb |