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.
Update attributes to only accept symbol keys (kwargs style).
      43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71  | 
    
      # File 'tab.rb', line 43 def initialize(attributes = {}) @installed_as_dependency = T.let(false, T::Boolean) @installed_on_request = T.let(false, T::Boolean) @installed_as_dependency_present = 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)) @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 do |key, value| case key.to_sym when :installed_as_dependency @installed_as_dependency = value @installed_as_dependency_present = true when :installed_on_request @installed_on_request = value @installed_on_request_present = true when :changed_files @changed_files = value&.map { |f| Pathname(f) } else instance_variable_set(:"@#{key}", value) end end 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.
      75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91  | 
    
      # File 'tab.rb', line 75 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.
      120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138  | 
    
      # File 'tab.rb', line 120 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.
      97 98 99 100 101 102 103 104  | 
    
      # File 'tab.rb', line 97 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.
      108 109 110 111 112 113 114 115 116 117  | 
    
      # File 'tab.rb', line 108 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.
      154 155 156 157 158 159  | 
    
      # File 'tab.rb', line 154 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.
      162 163 164 165  | 
    
      # File 'tab.rb', line 162 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.
      168 169 170 171  | 
    
      # File 'tab.rb', line 168 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.
      174 175 176 177  | 
    
      # File 'tab.rb', line 174 def write self.class.cache[tabfile] = self tabfile.atomic_write(to_json) end  |