0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-11-26 19:10:29 +01:00
discourse-custom-wizard/lib/custom_wizard/cache.rb

39 Zeilen
620 B
Ruby

# frozen_string_literal: true
class ::CustomWizard::Cache
def initialize(key)
@key = "#{CustomWizard::PLUGIN_NAME}_#{key}"
end
def read
cache.read(@key)
end
def write(data)
synchronize { cache.write(@key, data) }
end
def delete
synchronize { cache.delete(@key) }
end
def synchronize
DistributedMutex.synchronize(@key) { yield }
end
def cache
@cache ||= Discourse.cache
end
def self.wrap(key, &block)
c = new(key)
if cached = c.read
cached
else
result = block.call()
c.write(result)
result
end
end
end