Class: Cask::Config
Overview
This class is part of an internal API. This class may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this class if possible, as it may be removed or changed without warning.
Configuration for installing casks.
Constant Summary collapse
- DEFAULT_DIRS =
This constant is part of an internal API. This constant may only be used internally in repositories owned by Homebrew, except in casks or formulae. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
{ appdir: "/Applications", keyboard_layoutdir: "/Library/Keyboard Layouts", colorpickerdir: "~/Library/ColorPickers", prefpanedir: "~/Library/PreferencePanes", qlplugindir: "~/Library/QuickLook", mdimporterdir: "~/Library/Spotlight", dictionarydir: "~/Library/Dictionaries", fontdir: "~/Library/Fonts", servicedir: "~/Library/Services", input_methoddir: "~/Library/Input Methods", internet_plugindir: "~/Library/Internet Plug-Ins", audio_unit_plugindir: "~/Library/Audio/Plug-Ins/Components", vst_plugindir: "~/Library/Audio/Plug-Ins/VST", vst3_plugindir: "~/Library/Audio/Plug-Ins/VST3", screen_saverdir: "~/Library/Screen Savers", }.freeze
Instance Attribute Summary collapse
-
#explicit ⇒ Hash{Symbol => String, Pathname, Array<String>}
internal
Get the explicit configuration.
Class Method Summary collapse
- .canonicalize(config) ⇒ Hash{Symbol => String, Pathname, Array<String>} private
- .defaults ⇒ Object internal
- .from_args(args) ⇒ T.attached_class private
- .from_json(json, ignore_invalid_keys: false) ⇒ T.attached_class private
Instance Method Summary collapse
- #binarydir ⇒ Pathname private
- #default ⇒ Hash{Symbol => String, Pathname, Array<String>} private
- #env ⇒ Hash{Symbol => String, Pathname, Array<String>} private
-
#explicit_s ⇒ String
internal
Get explicit configuration as a string.
- #initialize(default: nil, env: nil, explicit: {}, ignore_invalid_keys: false) ⇒ void constructor private
- #languages ⇒ Array<String> private
- #languages=(languages) ⇒ Object internal
- #manpagedir ⇒ Pathname private
- #merge(other) ⇒ T.self_type private
- #to_json(*options) ⇒ String private
Constructor Details
#initialize(default: nil, env: nil, explicit: {}, ignore_invalid_keys: false) ⇒ 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.
106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'cask/config.rb', line 106 def initialize(default: nil, env: nil, explicit: {}, ignore_invalid_keys: false) @default = self.class.canonicalize(self.class.defaults.merge(default)) if default @env = self.class.canonicalize(env) if env @explicit = self.class.canonicalize(explicit) if ignore_invalid_keys @env&.delete_if { |key, _| self.class.defaults.keys.exclude?(key) } @explicit.delete_if { |key, _| self.class.defaults.keys.exclude?(key) } return end @env&.assert_valid_keys(*self.class.defaults.keys) @explicit.assert_valid_keys(*self.class.defaults.keys) end |
Instance Attribute Details
#explicit ⇒ Hash{Symbol => String, Pathname, Array<String>}
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.
Get the explicit configuration.
96 97 98 |
# File 'cask/config.rb', line 96 def explicit @explicit end |
Class Method Details
.canonicalize(config) ⇒ Hash{Symbol => String, Pathname, Array<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.
78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'cask/config.rb', line 78 def self.canonicalize(config) config.to_h do |k, v| key = k.to_sym if DEFAULT_DIRS.key?(key) raise TypeError, "Invalid path for default dir #{k}: #{v.inspect}" if v.is_a?(Array) [key, Pathname(v).] else [key, v] end end end |
.defaults ⇒ 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.
33 34 35 36 37 |
# File 'cask/config.rb', line 33 def self.defaults { languages: LazyObject.new { MacOS.languages }, }.merge(DEFAULT_DIRS).freeze end |
.from_args(args) ⇒ 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.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'cask/config.rb', line 40 def self.from_args(args) args = T.unsafe(args) new(explicit: { appdir: args.appdir, keyboard_layoutdir: args.keyboard_layoutdir, colorpickerdir: args.colorpickerdir, prefpanedir: args.prefpanedir, qlplugindir: args.qlplugindir, mdimporterdir: args.mdimporterdir, dictionarydir: args.dictionarydir, fontdir: args.fontdir, servicedir: args.servicedir, input_methoddir: args.input_methoddir, internet_plugindir: args.internet_plugindir, audio_unit_plugindir: args.audio_unit_plugindir, vst_plugindir: args.vst_plugindir, vst3_plugindir: args.vst3_plugindir, screen_saverdir: args.screen_saverdir, languages: args.language, }.compact) end |
.from_json(json, ignore_invalid_keys: false) ⇒ 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.
63 64 65 66 67 68 69 70 71 72 |
# File 'cask/config.rb', line 63 def self.from_json(json, ignore_invalid_keys: false) config = JSON.parse(json) new( default: config.fetch("default", {}), env: config.fetch("env", {}), explicit: config.fetch("explicit", {}), ignore_invalid_keys:, ) end |
Instance Method Details
#binarydir ⇒ Pathname
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.
146 147 148 |
# File 'cask/config.rb', line 146 def binarydir @binarydir ||= HOMEBREW_PREFIX/"bin" end |
#default ⇒ Hash{Symbol => String, Pathname, Array<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.
122 123 124 |
# File 'cask/config.rb', line 122 def default @default ||= self.class.canonicalize(self.class.defaults) end |
#env ⇒ Hash{Symbol => String, Pathname, Array<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.
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'cask/config.rb', line 127 def env @env ||= self.class.canonicalize( Homebrew::EnvConfig.cask_opts .select { |arg| arg.include?("=") } .map { |arg| T.cast(arg.split("=", 2), [String, String]) } .map do |(flag, value)| key = flag.sub(/^--/, "") # converts --language flag to :languages config key if key == "language" key = "languages" value = value.split(",") end [key, value] end, ) end |
#explicit_s ⇒ String
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.
This is only used by homebrew/bundle
, so move it there.
Get explicit configuration as a string.
197 198 199 200 201 202 203 204 205 206 |
# File 'cask/config.rb', line 197 def explicit_s explicit.map do |key, value| # inverse of #env - converts :languages config key back to --language flag if key == :languages key = "language" value = T.cast(explicit.fetch(:languages, []), T::Array[String]).join(",") end "#{key}: \"#{value.to_s.sub(/^#{Dir.home}/, "~")}\"" end.join(", ") end |
#languages ⇒ Array<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.
156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'cask/config.rb', line 156 def languages [ *explicit.fetch(:languages, []), *env.fetch(:languages, []), *default.fetch(:languages, []), ].uniq.select do |lang| # Ensure all languages are valid. Locale.parse(lang) true rescue Locale::ParserError false end end |
#languages=(languages) ⇒ 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.
170 171 172 |
# File 'cask/config.rb', line 170 def languages=(languages) explicit[:languages] = languages end |
#manpagedir ⇒ Pathname
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.
151 152 153 |
# File 'cask/config.rb', line 151 def manpagedir @manpagedir ||= HOMEBREW_PREFIX/"share/man" end |
#merge(other) ⇒ T.self_type
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.
187 188 189 |
# File 'cask/config.rb', line 187 def merge(other) self.class.new(explicit: other.explicit.merge(explicit)) end |
#to_json(*options) ⇒ 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.
209 210 211 212 213 214 215 |
# File 'cask/config.rb', line 209 def to_json(*) { default:, env:, explicit:, }.to_json(*) end |