Remove API placeholders in FormulaStruct and CaskStruct

This commit is contained in:
Rylan Polster
2026-03-02 20:46:59 -05:00
parent e7d847dfda
commit c2ac70b253
3 changed files with 22 additions and 0 deletions
+1
View File
@@ -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
+1
View File
@@ -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
+20
View File
@@ -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