Class: AbstractTab Abstract 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.
It cannot be directly instantiated. Subclasses must implement the abstract
methods below.
Rather than calling new
directly, use one of the class methods like Tab.create.
Constant Summary collapse
- 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"
Instance Attribute Summary collapse
- #arch ⇒ Object private
- #built_on ⇒ Object private
- #homebrew_version ⇒ String? private
-
#installed_as_dependency ⇒ Boolean?
internal
Check whether the formula or cask was installed as a dependency.
-
#installed_on_request ⇒ Boolean?
internal
Check whether the formula or cask was installed on request.
- #loaded_from_api ⇒ Object private
-
#runtime_dependencies ⇒ Object
internal
Returns the formula or cask runtime dependencies.
- #source ⇒ Object private
- #tabfile ⇒ Object private
- #time ⇒ Object 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
- #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.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'tab.rb', line 42 def initialize(attributes = {}) @installed_as_dependency = T.let(nil, T.nilable(T::Boolean)) @installed_on_request = T.let(nil, T.nilable(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)) @time = T.let(nil, T.nilable(Integer)) @arch = T.let(nil, T.nilable(String)) @source = T.let(nil, T.nilable(T::Hash[String, T.untyped])) @built_on = T.let(nil, T.nilable(T::Hash[String, T.untyped])) @runtime_dependencies = T.let(nil, T.nilable(T::Array[T.untyped])) attributes.each { |key, value| instance_variable_set(:"@#{key}", value) } end |
Instance Attribute Details
#arch ⇒ 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.
34 35 36 |
# File 'tab.rb', line 34 def arch @arch end |
#built_on ⇒ 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.
34 35 36 |
# File 'tab.rb', line 34 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.
32 33 34 |
# File 'tab.rb', line 32 def homebrew_version @homebrew_version end |
#installed_as_dependency ⇒ 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 as a dependency.
23 24 25 |
# File 'tab.rb', line 23 def installed_as_dependency @installed_as_dependency 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.
29 30 31 |
# File 'tab.rb', line 29 def installed_on_request @installed_on_request end |
#loaded_from_api ⇒ 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.
34 35 36 |
# File 'tab.rb', line 34 def loaded_from_api @loaded_from_api end |
#runtime_dependencies ⇒ Object
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.
39 40 41 |
# File 'tab.rb', line 39 def runtime_dependencies @runtime_dependencies end |
#source ⇒ 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.
34 35 36 |
# File 'tab.rb', line 34 def source @source end |
#tabfile ⇒ 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.
34 35 36 |
# File 'tab.rb', line 34 def tabfile @tabfile end |
#time ⇒ 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.
34 35 36 |
# File 'tab.rb', line 34 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.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'tab.rb', line 59 def self.create(formula_or_cask) attributes = { "homebrew_version" => HOMEBREW_VERSION, "installed_as_dependency" => false, "installed_on_request" => false, "loaded_from_api" => formula_or_cask.loaded_from_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.
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'tab.rb', line 104 def self.empty attributes = { "homebrew_version" => HOMEBREW_VERSION, "installed_as_dependency" => false, "installed_on_request" => false, "loaded_from_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
.
81 82 83 84 85 86 87 88 |
# File 'tab.rb', line 81 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.
92 93 94 95 96 97 98 99 100 101 |
# File 'tab.rb', line 92 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
#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.
137 138 139 140 141 142 |
# File 'tab.rb', line 137 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.
145 146 147 148 |
# File 'tab.rb', line 145 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.
151 152 153 154 |
# File 'tab.rb', line 151 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.
157 158 159 160 |
# File 'tab.rb', line 157 def write self.class.cache[tabfile] = self tabfile.atomic_write(to_json) end |