| 
									
										
										
										
											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 |