Class: Gemkeeper::CompactIndexServer::CacheStore
- Inherits:
-
Object
- Object
- Gemkeeper::CompactIndexServer::CacheStore
- Defined in:
- lib/gemkeeper/compact_index_server/cache_store.rb
Overview
Handles on-disk cache I/O: atomic writes, sidecar metadata, TTL checks. All paths are resolved relative to a base directory.
Constant Summary collapse
- ENTRIES =
{ versions: "versions", versions_merged: "versions.merged", versions_meta: "versions.meta", names: "names", names_merged: "names.merged", names_meta: "names.meta" }.freeze
Instance Method Summary collapse
- #atomic_write(full_path, content) ⇒ Object
- #etag_for(key) ⇒ Object
-
#initialize(base_dir) ⇒ CacheStore
constructor
A new instance of CacheStore.
- #path(key_or_filename) ⇒ Object
- #read_meta(filename) ⇒ Object
- #write_meta(filename, etag:) ⇒ Object
Constructor Details
#initialize(base_dir) ⇒ CacheStore
Returns a new instance of CacheStore.
23 24 25 26 |
# File 'lib/gemkeeper/compact_index_server/cache_store.rb', line 23 def initialize(base_dir) @base_dir = base_dir FileUtils.mkdir_p([base_dir, File.join(base_dir, "info"), File.join(base_dir, "gems")]) end |
Instance Method Details
#atomic_write(full_path, content) ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/gemkeeper/compact_index_server/cache_store.rb', line 47 def atomic_write(full_path, content) tmp = "#{full_path}.tmp.#{Process.pid}.#{Thread.current.object_id}" File.binwrite(tmp, content) File.rename(tmp, full_path) rescue StandardError File.unlink(tmp) if tmp && File.exist?(tmp) raise end |
#etag_for(key) ⇒ Object
56 57 58 59 60 61 |
# File 'lib/gemkeeper/compact_index_server/cache_store.rb', line 56 def etag_for(key) full_path = path(key) return nil unless File.exist?(full_path) Digest::SHA256.hexdigest(File.binread(full_path)) end |
#path(key_or_filename) ⇒ Object
28 29 30 31 |
# File 'lib/gemkeeper/compact_index_server/cache_store.rb', line 28 def path(key_or_filename) filename = ENTRIES.fetch(key_or_filename, key_or_filename) File.join(@base_dir, filename.to_s) end |
#read_meta(filename) ⇒ Object
33 34 35 36 37 38 39 40 |
# File 'lib/gemkeeper/compact_index_server/cache_store.rb', line 33 def (filename) full_path = File.join(@base_dir, "#{filename}.meta") return nil unless File.exist?(full_path) CacheMeta.load(YAML.safe_load_file(full_path)) rescue StandardError nil end |