Class: CacheStoreDatabase Private
Overview
This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.
CacheStoreDatabase acts as an interface to a persistent storage mechanism
residing in the HOMEBREW_CACHE
.
Class Method Summary collapse
-
.use(type) {|CacheStoreDatabase| ... } ⇒ Object
private
Yields the cache store database.
Instance Method Summary collapse
-
#clear! ⇒ Object
private
Deletes all content from the underlying database (if it already exists).
-
#created? ⇒ Boolean
private
Returns
true
if the cache file has been created for the given@type
. -
#delete(key) ⇒ Object
private
Deletes a value from the underlying database (if it already exists).
-
#each_key(&block) ⇒ Array
private
Performs a
each_key
on the underlying database. -
#empty? ⇒ Boolean
private
Returns
true
if the cache is empty. -
#get(key) ⇒ Object
private
Gets a value from the underlying database (if it already exists).
-
#initialize(type) ⇒ nil
constructor
private
Creates a CacheStoreDatabase.
-
#mtime ⇒ Time
private
Returns the modification time of the cache file (if it already exists).
-
#select(&block) ⇒ Array
private
Performs a
select
on the underlying database. -
#set(key, value) ⇒ Object
private
Sets a value in the underlying database (and creates it if necessary).
-
#write_if_dirty! ⇒ Object
private
Closes the underlying database (if it is created and open).
Constructor Details
#initialize(type) ⇒ nil
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Creates a CacheStoreDatabase.
45 46 47 48 |
# File 'cache_store.rb', line 45 def initialize(type) @type = type @dirty = false end |
Class Method Details
.use(type) {|CacheStoreDatabase| ... } ⇒ Object
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Yields the cache store database. Closes the database after use if it has been loaded.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'cache_store.rb', line 16 def self.use(type) @db_type_reference_hash ||= {} @db_type_reference_hash[type] ||= {} type_ref = @db_type_reference_hash[type] type_ref[:count] ||= 0 type_ref[:count] += 1 type_ref[:db] ||= CacheStoreDatabase.new(type) return_value = yield(type_ref[:db]) if type_ref[:count].positive? type_ref[:count] -= 1 else type_ref[:count] = 0 end if type_ref[:count].zero? type_ref[:db].write_if_dirty! type_ref.delete(:db) end return_value end |
Instance Method Details
#clear! ⇒ Object
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Deletes all content from the underlying database (if it already exists).
72 73 74 75 76 77 |
# File 'cache_store.rb', line 72 def clear! return unless created? dirty! db.clear end |
#created? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns true
if the cache file has been created for the given @type
.
90 91 92 |
# File 'cache_store.rb', line 90 def created? cache_path.exist? end |
#delete(key) ⇒ Object
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Deletes a value from the underlying database (if it already exists).
64 65 66 67 68 69 |
# File 'cache_store.rb', line 64 def delete(key) return unless created? dirty! db.delete(key) end |
#each_key(&block) ⇒ Array
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Performs a each_key
on the underlying database.
120 121 122 |
# File 'cache_store.rb', line 120 def each_key(&block) db.each_key(&block) end |
#empty? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns true
if the cache is empty.
113 114 115 |
# File 'cache_store.rb', line 113 def empty? db.empty? end |
#get(key) ⇒ Object
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Gets a value from the underlying database (if it already exists).
57 58 59 60 61 |
# File 'cache_store.rb', line 57 def get(key) return unless created? db[key] end |
#mtime ⇒ Time
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the modification time of the cache file (if it already exists).
97 98 99 100 101 |
# File 'cache_store.rb', line 97 def mtime return unless created? cache_path.mtime end |
#select(&block) ⇒ Array
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Performs a select
on the underlying database.
106 107 108 |
# File 'cache_store.rb', line 106 def select(&block) db.select(&block) end |
#set(key, value) ⇒ Object
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Sets a value in the underlying database (and creates it if necessary).
51 52 53 54 |
# File 'cache_store.rb', line 51 def set(key, value) dirty! db[key] = value end |
#write_if_dirty! ⇒ Object
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Closes the underlying database (if it is created and open).
80 81 82 83 84 85 |
# File 'cache_store.rb', line 80 def write_if_dirty! return unless dirty? cache_path.dirname.mkpath cache_path.atomic_write(JSON.dump(@db)) end |