Class: AbstractTab Private
- Extended by:
- Cachable, T::Generic, T::Helpers
- Defined in:
- tab.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.
Rather than calling new directly, use one of the class methods like Tab.create.
Constant Summary collapse
- Cache =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
type_template { { fixed: T::Hash[T.any(Pathname, String), T.untyped] } }
- FILENAME =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
"INSTALL_RECEIPT.json"- RuntimeDependencies =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
T.type_alias do T.nilable(T.any(T::Array[String], T::Array[T::Hash[String, T.untyped]], T::Hash[String, T.untyped], T::Hash[Symbol, T.untyped])) end
Instance Attribute Summary collapse
- #arch ⇒ String, ... private
- #built_on ⇒ Hash{String => T.untyped}? private
- #homebrew_version ⇒ String? private
-
#installed_on_request ⇒ Boolean
internal
Check whether the formula or cask was installed on request.
- #loaded_from_api ⇒ Boolean? private
- #loaded_from_internal_api ⇒ Boolean? private
-
#runtime_dependencies ⇒ RuntimeDependencies
internal
Returns the formula or cask runtime dependencies.
- #source ⇒ Hash{String => T.untyped} private
- #tabfile ⇒ Pathname? private
- #time ⇒ Integer? private
Class Method Summary collapse
-
.create(formula_or_cask) ⇒ T.attached_class
private
Instantiates a Tab for a new installation of a formula or cask.
- .empty ⇒ T.attached_class private
-
.from_file(path) ⇒ T.attached_class
private
Returns the Tab for a formula or cask install receipt at
path. -
.from_file_content(content, path) ⇒ T.attached_class
private
Like AbstractTab.from_file, but bypass the cache.
Instance Method Summary collapse
- #initialize(attributes = {}) ⇒ void constructor private
- #installed_on_request_present? ⇒ Boolean private
- #parsed_homebrew_version ⇒ Version private
- #tap ⇒ Tap? private
- #tap=(tap) ⇒ void private
- #write ⇒ void private
Methods included from Cachable
Constructor Details
#initialize(attributes = {}) ⇒ void
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.
Update attributes to only accept symbol keys (kwargs style).
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'tab.rb', line 66 def initialize(attributes = {}) @installed_on_request = T.let(false, T::Boolean) @installed_on_request_present = T.let(false, T::Boolean) @homebrew_version = T.let(nil, T.nilable(String)) @tabfile = T.let(nil, T.nilable(Pathname)) @loaded_from_api = T.let(nil, T.nilable(T::Boolean)) @loaded_from_internal_api = T.let(nil, T.nilable(T::Boolean)) @time = T.let(nil, T.nilable(Integer)) @arch = T.let(nil, T.nilable(T.any(String, Symbol))) @source = T.let({}, T::Hash[String, T.untyped]) @built_on = T.let(nil, T.nilable(T::Hash[String, T.untyped])) @runtime_dependencies = T.let(nil, RuntimeDependencies) attributes.each do |key, value| case key.to_sym when :installed_on_request @installed_on_request = value.nil? ? false : value @installed_on_request_present = true when :changed_files @changed_files = T.let(value&.map { |f| Pathname(f) }, T.nilable(T::Array[Pathname])) else instance_variable_set(:"@#{key}", value) end end end |
Instance Attribute Details
#arch ⇒ String, ...
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.
50 51 52 |
# File 'tab.rb', line 50 def arch @arch end |
#built_on ⇒ Hash{String => T.untyped}?
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.
56 57 58 |
# File 'tab.rb', line 56 def built_on @built_on end |
#homebrew_version ⇒ String?
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.
35 36 37 |
# File 'tab.rb', line 35 def homebrew_version @homebrew_version end |
#installed_on_request ⇒ Boolean
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Check whether the formula or cask was installed on request.
32 33 34 |
# File 'tab.rb', line 32 def installed_on_request @installed_on_request end |
#loaded_from_api ⇒ 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.
41 42 43 |
# File 'tab.rb', line 41 def loaded_from_api @loaded_from_api end |
#loaded_from_internal_api ⇒ 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.
44 45 46 |
# File 'tab.rb', line 44 def loaded_from_internal_api @loaded_from_internal_api end |
#runtime_dependencies ⇒ RuntimeDependencies
This method is part of an internal API. This method may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the formula or cask runtime dependencies.
62 63 64 |
# File 'tab.rb', line 62 def runtime_dependencies @runtime_dependencies end |
#source ⇒ Hash{String => T.untyped}
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.
53 54 55 |
# File 'tab.rb', line 53 def source @source end |
#tabfile ⇒ Pathname?
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.
38 39 40 |
# File 'tab.rb', line 38 def tabfile @tabfile end |
#time ⇒ Integer?
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.
47 48 49 |
# File 'tab.rb', line 47 def time @time end |
Class Method Details
.create(formula_or_cask) ⇒ T.attached_class
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.
Instantiates a Tab for a new installation of a formula or cask.
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'tab.rb', line 94 def self.create(formula_or_cask) attributes = { "homebrew_version" => HOMEBREW_VERSION, "installed_on_request" => false, "loaded_from_api" => formula_or_cask.loaded_from_api?, "loaded_from_internal_api" => formula_or_cask.loaded_from_internal_api?, "time" => Time.now.to_i, "arch" => Hardware::CPU.arch, "source" => { "tap" => formula_or_cask.tap&.name, "tap_git_head" => formula_or_cask.tap_git_head, }, "built_on" => DevelopmentTools.build_system_info, } new(attributes) end |
.empty ⇒ T.attached_class
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.
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'tab.rb', line 139 def self.empty attributes = { "homebrew_version" => HOMEBREW_VERSION, "installed_on_request" => false, "loaded_from_api" => false, "loaded_from_internal_api" => false, "time" => nil, "runtime_dependencies" => nil, "arch" => nil, "source" => { "path" => nil, "tap" => nil, "tap_git_head" => nil, }, "built_on" => DevelopmentTools.build_system_info, } new(attributes) end |
.from_file(path) ⇒ T.attached_class
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.
Results are cached.
Returns the Tab for a formula or cask install receipt at path.
116 117 118 119 120 121 122 123 |
# File 'tab.rb', line 116 def self.from_file(path) cache.fetch(path) do |p| content = File.read(p) return empty if content.blank? cache[p] = from_file_content(content, p) end end |
.from_file_content(content, path) ⇒ T.attached_class
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.
Like from_file, but bypass the cache.
127 128 129 130 131 132 133 134 135 136 |
# File 'tab.rb', line 127 def self.from_file_content(content, path) attributes = begin JSON.parse(content) rescue JSON::ParserError => e raise e, "Cannot parse #{path}: #{e}", e.backtrace end attributes["tabfile"] = path new(attributes) end |
Instance Method Details
#installed_on_request_present? ⇒ 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.
182 |
# File 'tab.rb', line 182 def installed_on_request_present? = @installed_on_request_present |
#parsed_homebrew_version ⇒ Version
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.
174 175 176 177 178 179 |
# File 'tab.rb', line 174 def parsed_homebrew_version homebrew_version = self.homebrew_version return Version::NULL if homebrew_version.nil? Version.new(homebrew_version) end |
#tap ⇒ Tap?
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.
185 186 187 188 |
# File 'tab.rb', line 185 def tap tap_name = source["tap"] Tap.fetch(tap_name) if tap_name end |
#tap=(tap) ⇒ void
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.
This method returns an undefined value.
191 192 193 194 |
# File 'tab.rb', line 191 def tap=(tap) tap_name = tap.is_a?(Tap) ? tap.name : tap source["tap"] = tap_name end |
#write ⇒ void
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.
This method returns an undefined value.
197 198 199 200 201 202 203 |
# File 'tab.rb', line 197 def write tfile = tabfile raise "No tabfile to write to" unless tfile self.class.cache[tfile] = self tfile.atomic_write(to_json) end |