Class: Cask::DSL Private
- Extended by:
- Attrable
- Includes:
- OnSystem::MacOSOnly
- Defined in:
- cask/dsl.rb,
cask/dsl/base.rb,
cask/dsl/caveats.rb,
cask/dsl/version.rb,
cask/dsl/container.rb,
cask/dsl/preflight.rb,
cask/dsl/depends_on.rb,
cask/dsl/postflight.rb,
cask/dsl/conflicts_with.rb,
cask/dsl/uninstall_preflight.rb,
cask/dsl/uninstall_postflight.rb,
sorbet/rbi/parlour.rbi
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.
Class representing the domain-specific language used for casks.
Defined Under Namespace
Classes: Base, Caveats, ConflictsWith, Container, DependsOn, Postflight, Preflight, UninstallPostflight, UninstallPreflight, Version
Constant Summary collapse
- ORDINARY_ARTIFACT_CLASSES =
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.
[ Artifact::Installer, Artifact::App, Artifact::Artifact, Artifact::AudioUnitPlugin, Artifact::Binary, Artifact::Colorpicker, Artifact::Dictionary, Artifact::Font, Artifact::InputMethod, Artifact::InternetPlugin, Artifact::KeyboardLayout, Artifact::Manpage, Artifact::Pkg, Artifact::Prefpane, Artifact::Qlplugin, Artifact::Mdimporter, Artifact::ScreenSaver, Artifact::Service, Artifact::StageOnly, Artifact::Suite, Artifact::VstPlugin, Artifact::Vst3Plugin, Artifact::Uninstall, Artifact::Zap, ].freeze
- ACTIVATABLE_ARTIFACT_CLASSES =
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.
(ORDINARY_ARTIFACT_CLASSES - [Artifact::StageOnly]).freeze
- ARTIFACT_BLOCK_CLASSES =
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.
[ Artifact::PreflightBlock, Artifact::PostflightBlock, ].freeze
- DSL_METHODS =
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.
Set.new([ :appcast, :arch, :artifacts, :auto_updates, :caveats, :conflicts_with, :container, :desc, :depends_on, :homepage, :language, :name, :sha256, :staged_path, :url, :version, :appdir, :deprecate!, :deprecated?, :deprecation_date, :deprecation_reason, :disable!, :disabled?, :disable_date, :disable_reason, :discontinued?, # TODO: remove once discontinued? is removed (4.5.0) :livecheck, :livecheckable?, :on_system_blocks_exist?, :on_system_block_min_os, :depends_on_set_in_block?, *ORDINARY_ARTIFACT_CLASSES.map(&:dsl_key), *ACTIVATABLE_ARTIFACT_CLASSES.map(&:dsl_key), *ARTIFACT_BLOCK_CLASSES.flat_map { |klass| [klass.dsl_key, klass.uninstall_dsl_key] }, ]).freeze
Instance Attribute Summary collapse
- #cask ⇒ Object readonly private
- #deprecation_date ⇒ Object readonly private
- #deprecation_reason ⇒ Object readonly private
- #disable_date ⇒ Object readonly private
- #disable_reason ⇒ Object readonly private
- #on_system_block_min_os ⇒ Object readonly private
- #token ⇒ Object readonly private
Instance Method Summary collapse
-
#appdir ⇒ Object
The directory
app
s are installed into. -
#arch(arm: nil, intel: nil) ⇒ Object
Sets the cask's architecture strings.
- #artifacts ⇒ Object private
-
#auto_updates(auto_updates = nil) ⇒ Object
Asserts that the cask artifacts auto-update.
- #caskroom_path ⇒ Object private
-
#caveats(*strings, &block) ⇒ Object
Provide the user with cask-specific information at install time.
-
#conflicts_with(**kwargs) ⇒ Object
Declare conflicts that keep a cask from installing or working correctly.
-
#container(**kwargs) ⇒ Object
Sets the cask's container type or nested container path.
-
#depends_on(**kwargs) ⇒ Object
Declare dependencies and requirements for a cask.
- #depends_on_set_in_block? ⇒ Boolean private
-
#deprecate!(date:, because:) ⇒ Object
Declare that a cask is no longer functional or supported.
- #deprecated? ⇒ Boolean private
-
#desc(description = nil) ⇒ Object
Describes the cask.
-
#disable!(date:, because:) ⇒ Object
Declare that a cask is no longer functional or supported.
- #disabled? ⇒ Boolean private
- #discontinued? ⇒ Boolean private
-
#homepage(homepage = nil) ⇒ Object
Sets the cask's homepage.
-
#initialize(cask) ⇒ DSL
constructor
private
A new instance of DSL.
- #language(*args, default: false, &block) ⇒ Object private
- #language_eval ⇒ Object private
- #languages ⇒ Object private
-
#livecheck(&block) ⇒ Object
Automatically fetch the latest version of a cask from changelogs.
- #livecheckable? ⇒ Boolean private
- #method_missing(method) ⇒ Object private
-
#name(*args) ⇒ Object
Specifies the cask's name.
- #on_system_blocks_exist? ⇒ Boolean private
- #respond_to_missing? ⇒ Boolean private
- #set_unique_stanza(stanza, should_return) ⇒ Object private
-
#sha256(arg = nil, arm: nil, intel: nil) ⇒ Object
Sets the cask's download checksum.
-
#staged_path ⇒ Object
The staged location for this cask, including version number.
-
#url(*args, **options, &block) ⇒ Object
Sets the cask's download URL.
-
#version(arg = nil) ⇒ Object
Sets the cask's version.
Methods included from Attrable
Methods included from OnSystem::MacOSOnly
included, #on_arch_conditional
Constructor Details
#initialize(cask) ⇒ DSL
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.
Returns a new instance of DSL.
113 114 115 116 |
# File 'cask/dsl.rb', line 113 def initialize(cask) @cask = cask @token = cask.token end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method) ⇒ 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.
496 497 498 499 500 501 502 503 |
# File 'cask/dsl.rb', line 496 def method_missing(method, *) if method Utils.(method, token) nil else super end end |
Instance Attribute Details
#cask ⇒ Object (readonly)
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.
108 109 110 |
# File 'cask/dsl.rb', line 108 def cask @cask end |
#deprecation_date ⇒ Object (readonly)
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.
108 109 110 |
# File 'cask/dsl.rb', line 108 def deprecation_date @deprecation_date end |
#deprecation_reason ⇒ Object (readonly)
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.
108 109 110 |
# File 'cask/dsl.rb', line 108 def deprecation_reason @deprecation_reason end |
#disable_date ⇒ Object (readonly)
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.
108 109 110 |
# File 'cask/dsl.rb', line 108 def disable_date @disable_date end |
#disable_reason ⇒ Object (readonly)
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.
108 109 110 |
# File 'cask/dsl.rb', line 108 def disable_reason @disable_reason end |
#on_system_block_min_os ⇒ Object (readonly)
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.
108 109 110 |
# File 'cask/dsl.rb', line 108 def on_system_block_min_os @on_system_block_min_os end |
#token ⇒ Object (readonly)
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.
108 109 110 |
# File 'cask/dsl.rb', line 108 def token @token end |
Instance Method Details
#appdir ⇒ Object
The directory app
s are installed into.
512 513 514 515 516 |
# File 'cask/dsl.rb', line 512 def appdir return HOMEBREW_CASK_APPDIR_PLACEHOLDER if Cask. cask.config.appdir end |
#arch(arm: nil, intel: nil) ⇒ Object
Sets the cask's architecture strings.
Example
arch arm: "darwin-arm64", intel: "darwin"
342 343 344 345 346 347 348 349 350 |
# File 'cask/dsl.rb', line 342 def arch(arm: nil, intel: nil) should_return = arm.nil? && intel.nil? set_unique_stanza(:arch, should_return) do @on_system_blocks_exist = true on_arch_conditional(arm:, intel:) end end |
#artifacts ⇒ 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.
378 379 380 |
# File 'cask/dsl.rb', line 378 def artifacts @artifacts ||= ArtifactSet.new end |
#auto_updates(auto_updates = nil) ⇒ Object
Asserts that the cask artifacts auto-update.
421 422 423 |
# File 'cask/dsl.rb', line 421 def auto_updates(auto_updates = nil) set_unique_stanza(:auto_updates, auto_updates.nil?) { auto_updates } end |
#caskroom_path ⇒ 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.
382 383 384 |
# File 'cask/dsl.rb', line 382 def caskroom_path cask.caskroom_path end |
#caveats(*strings, &block) ⇒ Object
Provide the user with cask-specific information at install time.
399 400 401 402 403 404 405 406 407 408 409 410 411 |
# File 'cask/dsl.rb', line 399 def caveats(*strings, &block) @caveats ||= DSL::Caveats.new(cask) if block @caveats.eval_caveats(&block) elsif strings.any? strings.each do |string| @caveats.eval_caveats { string } end else return @caveats.to_s end @caveats end |
#conflicts_with(**kwargs) ⇒ Object
Declare conflicts that keep a cask from installing or working correctly.
373 374 375 376 |
# File 'cask/dsl.rb', line 373 def conflicts_with(**kwargs) # TODO: Remove this constraint and instead merge multiple `conflicts_with` stanzas set_unique_stanza(:conflicts_with, kwargs.empty?) { DSL::ConflictsWith.new(**kwargs) } end |
#container(**kwargs) ⇒ Object
Sets the cask's container type or nested container path.
Examples
The container is a nested disk image:
container nested: "orca-#{version}.dmg"
The container should not be unarchived:
container type: :naked
271 272 273 274 275 |
# File 'cask/dsl.rb', line 271 def container(**kwargs) set_unique_stanza(:container, kwargs.empty?) do DSL::Container.new(**kwargs) end end |
#depends_on(**kwargs) ⇒ Object
Multiple dependencies can be specified.
Declare dependencies and requirements for a cask.
357 358 359 360 361 362 363 364 365 366 367 368 |
# File 'cask/dsl.rb', line 357 def depends_on(**kwargs) @depends_on ||= DSL::DependsOn.new @depends_on_set_in_block = true if @called_in_on_system_block return @depends_on if kwargs.empty? begin @depends_on.load(**kwargs) rescue RuntimeError => e raise CaskInvalidError.new(cask, e) end @depends_on end |
#depends_on_set_in_block? ⇒ 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.
376 |
# File 'sorbet/rbi/parlour.rbi', line 376 def depends_on_set_in_block?; end |
#deprecate!(date:, because:) ⇒ Object
A warning will be shown when trying to install this cask.
Declare that a cask is no longer functional or supported.
445 446 447 448 449 450 451 |
# File 'cask/dsl.rb', line 445 def deprecate!(date:, because:) @deprecation_date = Date.parse(date) return if @deprecation_date > Date.today @deprecation_reason = because @deprecated = true end |
#deprecated? ⇒ 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.
364 |
# File 'sorbet/rbi/parlour.rbi', line 364 def deprecated?; end |
#desc(description = nil) ⇒ Object
Describes the cask.
Example
desc "Open-source code editor"
145 146 147 |
# File 'cask/dsl.rb', line 145 def desc(description = nil) set_unique_stanza(:desc, description.nil?) { description } end |
#disable!(date:, because:) ⇒ Object
An error will be thrown when trying to install this cask.
Declare that a cask is no longer functional or supported.
458 459 460 461 462 463 464 465 466 467 468 469 |
# File 'cask/dsl.rb', line 458 def disable!(date:, because:) @disable_date = Date.parse(date) if @disable_date > Date.today @deprecation_reason = because @deprecated = true return end @disable_reason = because @disabled = true end |
#disabled? ⇒ 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.
367 |
# File 'sorbet/rbi/parlour.rbi', line 367 def disabled?; end |
#discontinued? ⇒ 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.
413 414 415 416 |
# File 'cask/dsl.rb', line 413 def discontinued? odeprecated "`discontinued?`", "`deprecated?` or `disabled?`" @caveats&.discontinued? == true end |
#homepage(homepage = nil) ⇒ Object
Sets the cask's homepage.
Example
homepage "https://code.visualstudio.com/"
179 180 181 |
# File 'cask/dsl.rb', line 179 def homepage(homepage = nil) set_unique_stanza(:homepage, homepage.nil?) { homepage } end |
#language(*args, default: false, &block) ⇒ 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.
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
# File 'cask/dsl.rb', line 183 def language(*args, default: false, &block) if args.empty? language_eval elsif block @language_blocks ||= {} @language_blocks[args] = block return unless default if !@cask.allow_reassignment && @language_blocks.default.present? raise CaskInvalidError.new(cask, "Only one default language may be defined.") end @language_blocks.default = block else raise CaskInvalidError.new(cask, "No block given to language stanza.") end end |
#language_eval ⇒ 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.
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'cask/dsl.rb', line 202 def language_eval return @language_eval if defined?(@language_eval) return @language_eval = nil if @language_blocks.blank? raise CaskInvalidError.new(cask, "No default language specified.") if @language_blocks.default.nil? locales = cask.config.languages .filter_map do |language| Locale.parse(language) rescue Locale::ParserError nil end locales.each do |locale| key = locale.detect(@language_blocks.keys) next if key.nil? return @language_eval = @language_blocks[key].call end @language_eval = @language_blocks.default.call end |
#languages ⇒ 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.
227 228 229 230 231 |
# File 'cask/dsl.rb', line 227 def languages return [] if @language_blocks.nil? @language_blocks.keys.flatten end |
#livecheck(&block) ⇒ Object
Automatically fetch the latest version of a cask from changelogs.
428 429 430 431 432 433 434 435 436 437 438 |
# File 'cask/dsl.rb', line 428 def livecheck(&block) @livecheck ||= Livecheck.new(cask) return @livecheck unless block if !@cask.allow_reassignment && @livecheckable raise CaskInvalidError.new(cask, "'livecheck' stanza may only appear once.") end @livecheckable = true @livecheck.instance_eval(&block) end |
#livecheckable? ⇒ 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.
370 |
# File 'sorbet/rbi/parlour.rbi', line 370 def livecheckable?; end |
#name(*args) ⇒ Object
Multiple names can be specified.
Specifies the cask's name.
Example
name "Visual Studio Code"
129 130 131 132 133 134 |
# File 'cask/dsl.rb', line 129 def name(*args) @name ||= [] return @name if args.empty? @name.concat(args.flatten) end |
#on_system_blocks_exist? ⇒ 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.
373 |
# File 'sorbet/rbi/parlour.rbi', line 373 def on_system_blocks_exist?; end |
#respond_to_missing? ⇒ 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.
505 506 507 |
# File 'cask/dsl.rb', line 505 def respond_to_missing?(*) true end |
#set_unique_stanza(stanza, should_return) ⇒ 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.
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'cask/dsl.rb', line 149 def set_unique_stanza(stanza, should_return) return instance_variable_get(:"@#{stanza}") if should_return unless @cask.allow_reassignment if instance_variable_defined?(:"@#{stanza}") && !@called_in_on_system_block raise CaskInvalidError.new(cask, "'#{stanza}' stanza may only appear once.") end if instance_variable_defined?(:"@#{stanza}_set_in_block") && @called_in_on_system_block raise CaskInvalidError.new(cask, "'#{stanza}' stanza may only be overridden once.") end end instance_variable_set(:"@#{stanza}_set_in_block", true) if @called_in_on_system_block instance_variable_set(:"@#{stanza}", yield) rescue CaskInvalidError raise rescue => e raise CaskInvalidError.new(cask, "'#{stanza}' stanza failed with: #{e}") end |
#sha256(arg = nil, arm: nil, intel: nil) ⇒ Object
Sets the cask's download checksum.
Example
For universal or single-architecture downloads:
sha256 "7bdb497080ffafdfd8cc94d8c62b004af1be9599e865e5555e456e2681e150ca"
For architecture-dependent downloads:
sha256 arm: "7bdb497080ffafdfd8cc94d8c62b004af1be9599e865e5555e456e2681e150ca",
intel: "b3c1c2442480a0219b9e05cf91d03385858c20f04b764ec08a3fa83d1b27e7b2"
315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 |
# File 'cask/dsl.rb', line 315 def sha256(arg = nil, arm: nil, intel: nil) should_return = arg.nil? && arm.nil? && intel.nil? set_unique_stanza(:sha256, should_return) do @on_system_blocks_exist = true if arm.present? || intel.present? val = arg || on_arch_conditional(arm:, intel:) case val when :no_check val when String Checksum.new(val) else raise CaskInvalidError.new(cask, "invalid 'sha256' value: #{val.inspect}") end end end |
#staged_path ⇒ Object
The staged location for this cask, including version number.
389 390 391 392 393 394 |
# File 'cask/dsl.rb', line 389 def staged_path return @staged_path if @staged_path cask_version = version || :unknown @staged_path = caskroom_path.join(cask_version.to_s) end |
#url(*args, **options, &block) ⇒ Object
Sets the cask's download URL.
Example
url "https://update.code.visualstudio.com/#{version}/#{arch}/stable"
242 243 244 245 246 247 248 249 250 251 252 |
# File 'cask/dsl.rb', line 242 def url(*args, **, &block) caller_location = T.must(caller_locations).fetch(0) set_unique_stanza(:url, args.empty? && .empty? && !block) do if block URL.new(*args, **, caller_location:, dsl: self, &block) else URL.new(*args, **, caller_location:) end end end |
#version(arg = nil) ⇒ Object
Sets the cask's version.
Example
version "1.88.1"
287 288 289 290 291 292 293 294 295 |
# File 'cask/dsl.rb', line 287 def version(arg = nil) set_unique_stanza(:version, arg.nil?) do if !arg.is_a?(String) && arg != :latest raise CaskInvalidError.new(cask, "invalid 'version' value: #{arg.inspect}") end DSL::Version.new(arg) end end |