Class: CacheStoreDatabase Private

Inherits:
Object show all
Defined in:
cache_store.rb

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

Instance Method Summary collapse

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.

Parameters:



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.

Parameters:

Yields:



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.

Returns:

  • (Boolean)


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.

Returns:



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.

Returns:

  • (Boolean)


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

#mtimeTime

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).

Returns:



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.

Returns:



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