otwarchive-symphonyarchive/app/models/indexing/cache_master.rb
2026-03-11 22:22:11 +00:00

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