63 lines
1.3 KiB
Ruby
63 lines
1.3 KiB
Ruby
class CacheMaster
|
|
|
|
CACHED_CLASSES = %w(Work Tag User Pseud Collection)
|
|
|
|
###################
|
|
# CLASS METHODS
|
|
###################
|
|
|
|
def self.expire_caches(work_ids)
|
|
work_ids.each { |id| self.new(id).expire }
|
|
end
|
|
|
|
def self.record(work_id, owner_type, owner_id)
|
|
self.new(work_id).record(owner_type, owner_id)
|
|
end
|
|
|
|
###################
|
|
# INSTANCE METHODS
|
|
###################
|
|
|
|
attr_reader :work_id
|
|
|
|
def initialize(work_id)
|
|
@work_id = work_id
|
|
end
|
|
|
|
def key
|
|
"works:#{work_id}:assocs"
|
|
end
|
|
|
|
def get_hash
|
|
REDIS_GENERAL.hgetall(key)
|
|
end
|
|
|
|
def get_value(owner_type)
|
|
REDIS_GENERAL.hget(key, owner_type)
|
|
end
|
|
|
|
def set_value(owner_type, value)
|
|
REDIS_GENERAL.hset(key, owner_type, value)
|
|
end
|
|
|
|
def reset!
|
|
REDIS_GENERAL.del(key)
|
|
end
|
|
|
|
def record(owner_type, owner_id)
|
|
owner_type = owner_type.to_s
|
|
data = get_value(owner_type)
|
|
value = data.nil? ? owner_id.to_s : "#{data},#{owner_id}"
|
|
set_value(owner_type, value)
|
|
end
|
|
|
|
def expire
|
|
get_hash.each_pair do |key, id_string|
|
|
raise "Redshirt: Attempted to constantize invalid class initialize expire #{key.classify}" unless CACHED_CLASSES.include?(key.classify)
|
|
klass = key.classify.constantize
|
|
klass.expire_ids(id_string.split(','))
|
|
end
|
|
reset!
|
|
end
|
|
|
|
end
|