| 
									
										
										
										
											2023-02-22 15:33:16 +00:00
										 |  |  | # typed: true | 
					
						
							|  |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "cli/parser" | 
					
						
							|  |  |  | require "cask/cask" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module Homebrew | 
					
						
							|  |  |  |   extend T::Sig | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   module_function | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   sig { returns(CLI::Parser) } | 
					
						
							|  |  |  |   def generate_cask_api_args | 
					
						
							|  |  |  |     Homebrew::CLI::Parser.new do | 
					
						
							|  |  |  |       description <<~EOS | 
					
						
							|  |  |  |         Generates Cask API data files for formulae.brew.sh. | 
					
						
							| 
									
										
										
										
											2023-02-23 08:45:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         The generated files are written to the current directory. | 
					
						
							| 
									
										
										
										
											2023-02-22 15:33:16 +00:00
										 |  |  |       EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       named_args :none | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-23 09:09:54 +00:00
										 |  |  |   CASK_JSON_TEMPLATE = <<~EOS | 
					
						
							| 
									
										
										
										
											2023-02-22 15:33:16 +00:00
										 |  |  |     --- | 
					
						
							|  |  |  |     layout: cask_json | 
					
						
							|  |  |  |     --- | 
					
						
							|  |  |  |     {{ content }} | 
					
						
							|  |  |  |   EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def html_template(title) | 
					
						
							|  |  |  |     <<~EOS | 
					
						
							|  |  |  |       --- | 
					
						
							|  |  |  |       title: #{title} | 
					
						
							|  |  |  |       layout: cask | 
					
						
							|  |  |  |       --- | 
					
						
							|  |  |  |       {{ content }} | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def generate_cask_api | 
					
						
							|  |  |  |     generate_cask_api_args.parse | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-23 08:45:56 +00:00
										 |  |  |     tap = Tap.default_cask_tap | 
					
						
							| 
									
										
										
										
											2023-02-22 15:33:16 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     directories = ["_data/cask", "api/cask", "api/cask-source", "cask"].freeze | 
					
						
							|  |  |  |     FileUtils.rm_rf directories | 
					
						
							|  |  |  |     FileUtils.mkdir_p directories | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Cask::Cask.generating_hash! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     tap.cask_files.each do |path| | 
					
						
							|  |  |  |       cask = Cask::CaskLoader.load(path) | 
					
						
							|  |  |  |       name = cask.token | 
					
						
							|  |  |  |       json = JSON.pretty_generate(cask.to_hash_with_variations) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       File.write("_data/cask/#{name}.json", "#{json}\n") | 
					
						
							| 
									
										
										
										
											2023-02-23 09:09:54 +00:00
										 |  |  |       File.write("api/cask/#{name}.json", CASK_JSON_TEMPLATE) | 
					
						
							| 
									
										
										
										
											2023-02-22 15:33:16 +00:00
										 |  |  |       File.write("api/cask-source/#{name}.rb", path.read) | 
					
						
							|  |  |  |       File.write("cask/#{name}.html", html_template(name)) | 
					
						
							| 
									
										
										
										
											2023-02-24 16:57:20 +00:00
										 |  |  |     rescue | 
					
						
							|  |  |  |       onoe "Error while generating data for cask '#{path.stem}'." | 
					
						
							|  |  |  |       raise | 
					
						
							| 
									
										
										
										
											2023-02-22 15:33:16 +00:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |