Класс: Requirement Абстрактный Приватный
- Наследует:
- Object
- Object
- Requirement
- Расширен:
- BuildEnvironment::DSL, Cachable, T::Generic, T::Helpers
- Подключает:
- Dependable, Utils::Output::Mixin
- Определён в:
- requirement.rb
Обзор
Этот класс является частью закрытого API. Этот класс можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого класса, поскольку он может быть удалён или изменён без предупреждения.
Его нельзя создать напрямую. Подклассы должны реализовать приведённые ниже методы abstract.
Базовый класс для требований, не связанных с формулами, которые необходимы формулам. Критическое требование — это требование, невыполнение которого приведёт к сбою сборки. По умолчанию требования не являются критическими.
Прямые известные подклассы
ArchRequirement, CaskDependent::Requirement, LinuxRequirement, MacOSRequirement, XcodeRequirement
Сводка констант свернуть
- Cache =
Эта константа является частью закрытого API. Эту константу можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
type_template { { fixed: T::Hash[String, T.untyped] } }
Константы, включённые из Dependable
Dependable::KEEP_BUT_PRUNE_RECURSIVE_DEPS, Dependable::PRUNE, Dependable::RESERVED_TAGS, Dependable::SKIP
Краткое описание атрибутов класса свернуть
- .build ⇒ Boolean? только для чтения приватный
- .env_proc ⇒ T.proc.void? только для чтения приватный
Краткое описание атрибутов экземпляра свернуть
- #cask ⇒ String? только для чтения приватный
- #download ⇒ String? только для чтения приватный
- #name ⇒ String только для чтения приватный
- #tags ⇒ Array<T.untyped> только для чтения приватный
Краткое описание методов класса свернуть
- .cask(val = T.unsafe(nil)) ⇒ String? закрытый
- .download(val = T.unsafe(nil)) ⇒ String? закрытый
- .env(*settings, &block) ⇒ BuildEnvironment? закрытый
- .expand(dependent, cache_key: nil, &block) ⇒ Requirements закрытый
Рекурсивно раскрывает требования зависимого элемента, при необходимости передавая пары
[dependent, req], чтобы вызывающий код мог применить к списку произвольные фильтры. - .fatal(val = T.unsafe(nil)) ⇒ Boolean? закрытый
- .inherited(child) ⇒ void закрытый
- .prune?(dependent, req, &block) ⇒ Boolean закрытый
- .satisfy(options = nil, &block) ⇒ Satisfier? закрытый
Краткое описание методов экземпляра свернуть
- #display_s ⇒ String закрытый
- #env ⇒ BuildEnvironment? закрытый
- #env_proc ⇒ T.proc.void? закрытый
- #fatal? ⇒ Boolean закрытый
Переопределение #fatal? не поддерживается.
- #initialize(tags = []) ⇒ void конструктор закрытый
- #message ⇒ String закрытый
Сообщение, отображаемое, если требование не выполнено.
- #mktemp(&block) ⇒ void закрытый
- #modify_build_environment(env: nil, cc: nil, build_bottle: false, bottle_arch: nil) ⇒ void закрытый
Передайте блок методу DSL env вместо переопределения.
- #option_names ⇒ Array<String> закрытый
- #satisfied?(env: nil, cc: nil, build_bottle: false, bottle_arch: nil) ⇒ Boolean закрытый
Переопределение #satisfied? не поддерживается.
- #satisfied_result_parent ⇒ Pathname? закрытый
- #tap ⇒ Tap? абстрактный закрытый
- #which(cmd, path = PATH.new(ORIGINAL_PATHS)) ⇒ Pathname? закрытый
Методы, включённые из BuildEnvironment::DSL
Методы, включённые из Cachable
Методы, включённые из Utils::Output::Mixin
#issue_reporting_message, #odebug, #odeprecated, #odie, #odisabled, #ofail, #oh1, #oh1_title, #ohai, #ohai_title, #onoe, #opoo, #opoo_outside_github_actions, #opoo_without_github_actions_annotation, #pretty_deprecated, #pretty_disabled, #pretty_duration, #pretty_install_status, #pretty_installed, #pretty_uninstalled, #pretty_upgradable, #pretty_warning
Методы, включённые из Dependable
#build?, #implicit?, #no_linkage?, #option_tags, #optional?, #options, #prune_from_option?, #prune_if_build_and_not_dependent?, #recommended?, #required?, #test?
Подробное описание конструкторов
#initialize(tags = []) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 | # File 'requirement.rb', line 45 def initialize( = []) @cask = T.let(self.class.cask, T.nilable(String)) @download = T.let(self.class.download, T.nilable(String)) .each do |tag| next unless tag.is_a? Hash @cask ||= tag[:cask] @download ||= tag[:download] end @tags = T.let(, T::Array[T.untyped]) @tags << :build if self.class.build inferred_name = infer_name @name = T.let(inferred_name, String) end |
Подробное описание атрибутов класса
.build ⇒ Boolean? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
235 236 237 | # File 'requirement.rb', line 235 def build @build end |
.env_proc ⇒ T.proc.void? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
232 233 234 | # File 'requirement.rb', line 232 def env_proc @env_proc end |
Подробное описание атрибутов экземпляра
#cask ⇒ String? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
36 37 38 | # File 'requirement.rb', line 36 def cask @cask end |
#download ⇒ String? (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
39 40 41 | # File 'requirement.rb', line 39 def download @download end |
#name ⇒ String (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
33 34 35 | # File 'requirement.rb', line 33 def name @name end |
#tags ⇒ Array<T.untyped> (только для чтения)
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
42 43 44 | # File 'requirement.rb', line 42 def @tags end |
Подробное описание методов класса
.cask(val = T.unsafe(nil)) ⇒ String?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
238 239 240 | # File 'requirement.rb', line 238 def cask(val = T.unsafe(nil)) val.nil? ? @cask : @cask = val end |
.download(val = T.unsafe(nil)) ⇒ String?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
243 244 245 | # File 'requirement.rb', line 243 def download(val = T.unsafe(nil)) val.nil? ? @download : @download = val end |
.env(*settings, &block) ⇒ BuildEnvironment?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
266 267 268 269 270 271 272 273 | # File 'requirement.rb', line 266 def env(*settings, &block) if block @env_proc = T.let(block, T.nilable(T.proc.void)) nil else super end end |
.expand(dependent, cache_key: nil, &block) ⇒ Requirements
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Рекурсивно раскрывает требования dependent; при необходимости передаёт пары [dependent, req], чтобы вызывающий код мог применить к списку произвольные фильтры. Фильтр по умолчанию, применяемый, если блок не задан, исключает необязательные требования и рекомендации в соответствии с запросами dependent.
334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 | # File 'requirement.rb', line 334 def (dependent, cache_key: nil, &block) if cache_key.present? cache[cache_key] ||= {} return cache[cache_key][cache_id dependent].dup if cache[cache_key][cache_id dependent] end reqs = Requirements.new formulae = T.let(dependent.recursive_dependencies.map(&:to_formula), T::Array[T.any(Formula, CaskDependent, SoftwareSpec)]) formulae.unshift(dependent) formulae.each do |f| f.requirements.each do |req| next if prune?(f, req, &block) reqs << req end end if cache_key.present? # Even though we setup the cache above # 'dependent.recursive_dependencies.map(&:to_formula)' # is invalidating the singleton cache cache[cache_key] ||= {} cache[cache_key][cache_id dependent] = reqs.dup end reqs end |
.fatal(val = T.unsafe(nil)) ⇒ Boolean?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
248 249 250 | # File 'requirement.rb', line 248 def fatal(val = T.unsafe(nil)) val.nil? ? @fatal : @fatal = val end |
.inherited(child) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
219 220 221 222 223 224 225 226 227 228 229 | # File 'requirement.rb', line 219 def inherited(child) super child.instance_eval do @cask = T.let(nil, T.nilable(String)) @download = T.let(nil, T.nilable(String)) @fatal = T.let(nil, T.nilable(T::Boolean)) @satisfied = T.let(nil, T.nilable(Satisfier)) @build = T.let(nil, T.nilable(T::Boolean)) @env_proc = T.let(nil, T.nilable(T.proc.void)) end end |
.prune?(dependent, req, &block) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
372 373 374 375 376 377 378 379 380 | # File 'requirement.rb', line 372 def prune?(dependent, req, &block) if block yield(dependent, req) == Dependable::PRUNE elsif req.optional? || req.recommended? !T.cast(dependent, Formula).build.with?(req) else false end end |
.satisfy(options = nil, &block) ⇒ Satisfier?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
256 257 258 259 260 261 | # File 'requirement.rb', line 256 def satisfy( = nil, &block) return @satisfied if .nil? && !block = {} if .nil? @satisfied = Satisfier.new(, &block) end |
Подробное описание методов экземпляра
#display_s ⇒ String
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.
186 187 188 | # File 'requirement.rb', line 186 def display_s name.capitalize end |
#env ⇒ BuildEnvironment?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.
156 157 158 | # File 'requirement.rb', line 156 def env self.class.env end |
#env_proc ⇒ T.proc.void?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.
161 162 163 | # File 'requirement.rb', line 161 def env_proc self.class.env_proc end |
#fatal? ⇒ Boolean
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.
Переопределение #fatal? не поддерживается. Вместо этого передайте логическое значение методу fatal DSL.
114 115 116 | # File 'requirement.rb', line 114 def fatal? self.class.fatal || false end |
#message ⇒ String
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.
Сообщение, отображаемое, если требование не выполнено.
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | # File 'requirement.rb', line 67 def _, _, class_name = self.class.to_s.rpartition "::" s = "#{class_name} unsatisfied!\n" if cask s += <<~EOS You can install the necessary cask with: brew install --cask #{cask} EOS end if download s += <<~EOS You can download from: #{Formatter.url(download)} EOS end s end |
#mktemp(&block) ⇒ void
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
191 192 193 | # File 'requirement.rb', line 191 def mktemp(&block) Mktemp.new(name).run(&block) end |
#modify_build_environment(env: nil, cc: nil, build_bottle: false, bottle_arch: nil) ⇒ void
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
Вместо переопределения передайте блок методу env DSL.
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | # File 'requirement.rb', line 138 def modify_build_environment(env: nil, cc: nil, build_bottle: false, bottle_arch: nil) satisfied?(env:, cc:, build_bottle:, bottle_arch:) instance_eval(&T.must(env_proc)) if env_proc # XXX If the satisfy block returns a Pathname, then make sure that it # remains available on the PATH. This makes requirements like # satisfy { which("executable") } # work, even under superenv where "executable" wouldn't normally be on the # PATH. parent = satisfied_result_parent return unless parent return if ["#{HOMEBREW_PREFIX}/bin", "#{HOMEBREW_PREFIX}/sbin"].include?(parent.to_s) return if PATH.new(ENV.fetch("PATH")).include?(parent.to_s) ENV.prepend_path("PATH", parent) end |
#option_names ⇒ Array<String>
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.
61 62 63 | # File 'requirement.rb', line 61 def option_names [name] end |
#satisfied?(env: nil, cc: nil, build_bottle: false, bottle_arch: nil) ⇒ Boolean
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.
Переопределение #satisfied? не поддерживается. Вместо этого передайте блок или логическое значение методу DSL satisfy.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 | # File 'requirement.rb', line 96 def satisfied?(env: nil, cc: nil, build_bottle: false, bottle_arch: nil) satisfy = self.class.satisfy return true unless satisfy @satisfied_result = T.let( satisfy.yielder(env:, cc:, build_bottle:, bottle_arch:) do |p| instance_eval(&T.must(p)) end, Object, ) return false unless @satisfied_result true end |
#satisfied_result_parent ⇒ Pathname?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.
119 120 121 122 123 124 125 126 127 | # File 'requirement.rb', line 119 def satisfied_result_parent return unless @satisfied_result.is_a?(Pathname) parent = @satisfied_result.resolved_path.parent if parent.to_s =~ %r{^#{Regexp.escape(HOMEBREW_CELLAR)}/([\w+-.@]+)/[^/]+/(s?bin)/?$}o parent = HOMEBREW_PREFIX/"opt/#{Regexp.last_match(1)}/#{Regexp.last_match(2)}" end parent end |
#tap ⇒ Tap?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.
30 | # File 'requirement.rb', line 30 def tap; end |
#which(cmd, path = PATH.new(ORIGINAL_PATHS)) ⇒ Pathname?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.
210 211 212 | # File 'requirement.rb', line 210 def which(cmd, path = PATH.new(ORIGINAL_PATHS)) super end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Requirement.html