Spec-Zone.ru › Homebrew

Класс: 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

inherited

Методы, включённые из Cachable

cache, clear_cache

Методы, включённые из 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. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Параметры:

  • tags (Array<T.untyped>) (по умолчанию: [])


45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'requirement.rb', line 45

def initialize(tags = [])
  @cask = T.let(self.class.cask, T.nilable(String))
  @download = T.let(self.class.download, T.nilable(String))
  tags.each do |tag|
    next unless tag.is_a? Hash

    @cask ||= tag[:cask]
    @download ||= tag[:download]
  end
  @tags = T.let(tags, 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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean, nil)


235
236
237
# File 'requirement.rb', line 235

def build
  @build
end

.env_proc ⇒ T.proc.void? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (T.proc.void, nil)


232
233
234
# File 'requirement.rb', line 232

def env_proc
  @env_proc
end

Подробное описание атрибутов экземпляра

#cask ⇒ String? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String, nil)


36
37
38
# File 'requirement.rb', line 36

def cask
  @cask
end

#download ⇒ String? (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String, nil)


39
40
41
# File 'requirement.rb', line 39

def download
  @download
end

#name ⇒ String (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String)


33
34
35
# File 'requirement.rb', line 33

def name
  @name
end

#tags ⇒ Array<T.untyped> (только для чтения)

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<T.untyped>)


42
43
44
# File 'requirement.rb', line 42

def tags
  @tags
end

Подробное описание методов класса

.cask(val = T.unsafe(nil)) ⇒ String?

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • val (String) (по умолчанию: T.unsafe(nil))

Возвращает:

  • (String, nil)


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. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • val (String) (по умолчанию: T.unsafe(nil))

Возвращает:

  • (String, nil)


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. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • settings (Symbol)
  • block (T.proc.void, nil)

Возвращает:

  • (BuildEnvironment, nil)


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.

Параметры:

  • dependent (Formula, CaskDependent, SoftwareSpec)
  • cache_key (String, nil) (по умолчанию: nil)
  • block (T.proc.params(arg0: T.any(Formula, CaskDependent, SoftwareSpec), arg1: Requirement).returns(T.nilable(Symbol)), nil)

Возвращает:

  • (Requirements)


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 expand(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. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • val (Boolean) (по умолчанию: T.unsafe(nil))

Возвращает:

  • (Boolean, nil)


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. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • child (T::Class[T.anything])


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. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Параметры:

  • dependent (Formula, CaskDependent, SoftwareSpec)
  • req (Requirement)
  • block (T.proc.params(arg0: T.any(Formula, CaskDependent, SoftwareSpec), arg1: Requirement).returns(T.nilable(Symbol)), nil)

Возвращаемое значение:

  • (Boolean)


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. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Параметры:

  • options (Boolean, Hash{Symbol => T.anything}, Satisfier, nil) (по умолчанию: nil)
  • block (T.proc.returns(T.anything), nil)

Возвращаемое значение:

  • (Satisfier, nil)


256
257
258
259
260
261
# File 'requirement.rb', line 256

def satisfy(options = nil, &block)
  return @satisfied if options.nil? && !block

  options = {} if options.nil?
  @satisfied = Satisfier.new(options, &block)
end

Подробное описание методов экземпляра

#display_s ⇒ String

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String)


186
187
188
# File 'requirement.rb', line 186

def display_s
  name.capitalize
end

#env ⇒ BuildEnvironment?

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (BuildEnvironment, nil)


156
157
158
# File 'requirement.rb', line 156

def env
  self.class.env
end

#env_proc ⇒ T.proc.void?

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (T.proc.void, nil)


161
162
163
# File 'requirement.rb', line 161

def env_proc
  self.class.env_proc
end

#fatal? ⇒ Boolean

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.

Переопределение #fatal? не поддерживается. Вместо этого передайте логическое значение методу fatal DSL.

Возвращает:

  • (Boolean)


114
115
116
# File 'requirement.rb', line 114

def fatal?
  self.class.fatal || false
end

#message ⇒ String

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.

Сообщение, отображаемое, если требование не выполнено.

Возвращает:

  • (String)


67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'requirement.rb', line 67

def message
  _, _, 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. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • block (T.proc.params(arg0: Mktemp).void)


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.

Параметры:

  • env (String, nil) (по умолчанию: nil)
  • cc (String, nil) (по умолчанию: nil)
  • build_bottle (Boolean) (по умолчанию: false)
  • bottle_arch (String, nil) (по умолчанию: nil)


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. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<String>)


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.

Параметры:

  • env (String, nil) (по умолчанию: nil)
  • cc (String, nil) (по умолчанию: nil)
  • build_bottle (Boolean) (по умолчанию: false)
  • bottle_arch (String, nil) (по умолчанию: nil)

Возвращает:

  • (Boolean)


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. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Pathname, nil)


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. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.

Этот метод является абстрактным.

Возвращает:

  • (Tap, nil)


30
# File 'requirement.rb', line 30

def tap; end

#which(cmd, path = PATH.new(ORIGINAL_PATHS)) ⇒ Pathname?

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности не следует использовать этот метод, так как он может быть удалён или изменён без предупреждения.

Параметры:

  • cmd (String)
  • path (PATH::Elements) (по умолчанию: PATH.new(ORIGINAL_PATHS))

Возвращает:

  • (Pathname, nil)


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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API