mirror of
https://github.com/Homebrew/brew.git
synced 2026-08-12 22:29:27 +04:00
Remove API placeholders in FormulaStruct and CaskStruct
This commit is contained in:
@@ -8,6 +8,7 @@ module Homebrew
|
||||
def self.from_hash(cask_hash, ignore_types: false)
|
||||
return super(cask_hash) if ignore_types
|
||||
|
||||
cask_hash = ::Cask::Cask.deep_remove_placeholders(cask_hash)
|
||||
cask_hash = cask_hash.transform_keys(&:to_sym)
|
||||
.slice(*decorator.all_props)
|
||||
.compact_blank
|
||||
|
||||
@@ -9,6 +9,7 @@ module Homebrew
|
||||
class FormulaStruct < T::Struct
|
||||
sig { params(formula_hash: T::Hash[String, T.untyped]).returns(FormulaStruct) }
|
||||
def self.from_hash(formula_hash)
|
||||
formula_hash = ::Formula.deep_remove_placeholders(formula_hash)
|
||||
formula_hash = formula_hash.transform_keys(&:to_sym)
|
||||
.slice(*decorator.all_props)
|
||||
.compact_blank
|
||||
|
||||
@@ -38,4 +38,24 @@ module APIHashable
|
||||
@generating_hash ||= false
|
||||
@generating_hash == true
|
||||
end
|
||||
|
||||
sig { type_parameters(:U).params(value: T.type_parameter(:U)).returns(T.type_parameter(:U)) }
|
||||
def deep_remove_placeholders(value)
|
||||
return value if generating_hash?
|
||||
|
||||
value = case value
|
||||
when Hash
|
||||
value.transform_values { |v| deep_remove_placeholders(v) }
|
||||
when Array
|
||||
value.map { |v| deep_remove_placeholders(v) }
|
||||
when String
|
||||
value.gsub(HOMEBREW_HOME_PLACEHOLDER, Dir.home)
|
||||
.gsub(HOMEBREW_PREFIX_PLACEHOLDER, HOMEBREW_PREFIX)
|
||||
.gsub(HOMEBREW_CELLAR_PLACEHOLDER, HOMEBREW_CELLAR)
|
||||
else
|
||||
value
|
||||
end
|
||||
|
||||
T.cast(value, T.type_parameter(:U))
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user