diff options
Diffstat (limited to 'lib/gitlab/repository_cache.rb')
-rw-r--r-- | lib/gitlab/repository_cache.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/gitlab/repository_cache.rb b/lib/gitlab/repository_cache.rb new file mode 100644 index 00000000000..b1bf3ca4143 --- /dev/null +++ b/lib/gitlab/repository_cache.rb @@ -0,0 +1,33 @@ +# Interface to the Redis-backed cache store +module Gitlab + class RepositoryCache + attr_reader :repository, :namespace, :backend + + def initialize(repository, extra_namespace: nil, backend: Rails.cache) + @repository = repository + @namespace = "#{repository.full_path}:#{repository.project.id}" + @namespace += ":#{extra_namespace}" if extra_namespace + @backend = backend + end + + def cache_key(type) + "#{type}:#{namespace}" + end + + def expire(key) + backend.delete(cache_key(key)) + end + + def fetch(key, &block) + backend.fetch(cache_key(key), &block) + end + + def exist?(key) + backend.exist?(cache_key(key)) + end + + def read(key) + backend.read(cache_key(key)) + end + end +end |