2024-03-30 18:29:38 +00:00
|
|
|
# typed: strict
|
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require_relative "../../../global"
|
|
|
|
require "env_config"
|
|
|
|
|
|
|
|
module Tapioca
|
|
|
|
module Compilers
|
|
|
|
class EnvConfig < Tapioca::Dsl::Compiler
|
|
|
|
ConstantType = type_member { { fixed: Module } }
|
|
|
|
|
|
|
|
sig { override.returns(T::Enumerable[Module]) }
|
|
|
|
def self.gather_constants = [Homebrew::EnvConfig]
|
|
|
|
|
|
|
|
sig { override.void }
|
|
|
|
def decorate
|
|
|
|
root.create_module(T.must(constant.name)) do |mod|
|
|
|
|
dynamic_methods = {}
|
|
|
|
Homebrew::EnvConfig::ENVS.each do |env, hash|
|
|
|
|
next if Homebrew::EnvConfig::CUSTOM_IMPLEMENTATIONS.include?(env)
|
|
|
|
|
|
|
|
name = Homebrew::EnvConfig.env_method_name(env, hash)
|
2024-03-30 19:54:51 +00:00
|
|
|
dynamic_methods[name] = hash[:default]
|
2024-03-30 18:29:38 +00:00
|
|
|
end
|
|
|
|
|
2024-03-30 19:54:51 +00:00
|
|
|
dynamic_methods.each do |method, default|
|
2024-03-30 18:29:38 +00:00
|
|
|
return_type = if method.end_with?("?")
|
|
|
|
T::Boolean
|
2024-03-30 19:54:51 +00:00
|
|
|
elsif default
|
2024-03-30 18:29:38 +00:00
|
|
|
default.class
|
|
|
|
else
|
|
|
|
T.nilable(String)
|
|
|
|
end
|
|
|
|
|
|
|
|
mod.create_method(method, return_type:, class_method: true)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|