Class: Cask::Config Private

Inherits:
Object show all
Defined in:
cask/config.rb

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.

Configuration for installing casks.

Constant Summary collapse

DEFAULT_DIRS =

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.

{
  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

Class Method Summary collapse

Instance Method Summary collapse

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.

Parameters:



99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'cask/config.rb', line 99

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

#explicitHash{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.

Returns:



89
90
91
# File 'cask/config.rb', line 89

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.

Parameters:

Returns:



76
77
78
79
80
81
82
83
84
85
86
# File 'cask/config.rb', line 76

def self.canonicalize(config)
  config.to_h do |k, v|
    key = k.to_sym

    if DEFAULT_DIRS.key?(key)
      [key, Pathname(v).expand_path]
    else
      [key, v]
    end
  end
end

.defaultsObject

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
35
36
# File 'cask/config.rb', line 32

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.

Parameters:

Returns:

  • (T.attached_class)


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'cask/config.rb', line 39

def self.from_args(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.

Parameters:

  • json (String)
  • ignore_invalid_keys (Boolean) (defaults to: false)

Returns:

  • (T.attached_class)


61
62
63
64
65
66
67
68
69
70
# File 'cask/config.rb', line 61

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: ignore_invalid_keys,
  )
end

Instance Method Details

#binarydirPathname

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:



139
140
141
# File 'cask/config.rb', line 139

def binarydir
  @binarydir ||= HOMEBREW_PREFIX/"bin"
end

#defaultHash{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.

Returns:



115
116
117
# File 'cask/config.rb', line 115

def default
  @default ||= self.class.canonicalize(self.class.defaults)
end

#envHash{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.

Returns:



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'cask/config.rb', line 120

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_sString

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:



185
186
187
188
189
190
191
192
193
194
# File 'cask/config.rb', line 185

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

#languagesArray<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.

Returns:



149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'cask/config.rb', line 149

def languages
  [
    *T.cast(explicit.fetch(:languages, []), T::Array[String]),
    *T.cast(env.fetch(:languages, []), T::Array[String]),
    *T.cast(default.fetch(:languages, []), T::Array[String]),
  ].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 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.



163
164
165
# File 'cask/config.rb', line 163

def languages=(languages)
  explicit[:languages] = languages
end

#manpagedirPathname

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:



144
145
146
# File 'cask/config.rb', line 144

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.

Parameters:

Returns:

  • (T.self_type)


180
181
182
# File 'cask/config.rb', line 180

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.

Parameters:

  • options (T.untyped)

Returns:



197
198
199
200
201
202
203
# File 'cask/config.rb', line 197

def to_json(*options)
  {
    default:  default,
    env:      env,
    explicit: explicit,
  }.to_json(*options)
end