| 
									
										
										
										
											2023-02-11 22:16:57 -08:00
										 |  |  | # typed: true | 
					
						
							| 
									
										
										
										
											2021-08-06 02:30:44 -04:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-16 21:49:03 +00:00
										 |  |  | require "extend/cachable" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-06 02:30:44 -04:00
										 |  |  | module Homebrew | 
					
						
							|  |  |  |   module API | 
					
						
							|  |  |  |     # Helper functions for using the formula JSON API. | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # @api private | 
					
						
							|  |  |  |     module Formula | 
					
						
							| 
									
										
										
										
											2021-08-09 16:48:13 -04:00
										 |  |  |       class << self | 
					
						
							| 
									
										
										
										
											2023-02-16 21:49:03 +00:00
										 |  |  |         include Cachable | 
					
						
							| 
									
										
										
										
											2021-08-09 16:48:13 -04:00
										 |  |  |         extend T::Sig | 
					
						
							| 
									
										
										
										
											2021-08-06 02:30:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-16 21:49:03 +00:00
										 |  |  |         private :cache | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-09 16:48:13 -04:00
										 |  |  |         sig { params(name: String).returns(Hash) } | 
					
						
							|  |  |  |         def fetch(name) | 
					
						
							| 
									
										
										
										
											2022-12-30 02:24:12 -05:00
										 |  |  |           Homebrew::API.fetch "formula/#{name}.json" | 
					
						
							| 
									
										
										
										
											2021-08-09 16:48:13 -04:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2021-12-07 00:13:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-16 21:49:03 +00:00
										 |  |  |         sig { returns(T::Boolean) } | 
					
						
							|  |  |  |         def download_and_cache_data! | 
					
						
							| 
									
										
										
										
											2023-02-19 00:54:45 +00:00
										 |  |  |           json_formulae, updated = Homebrew::API.fetch_json_api_file "formula.jws.json", | 
					
						
							|  |  |  |                                                                      target: HOMEBREW_CACHE_API/"formula.jws.json" | 
					
						
							| 
									
										
										
										
											2022-09-14 23:54:14 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-16 21:49:03 +00:00
										 |  |  |           cache["aliases"] = {} | 
					
						
							|  |  |  |           cache["formulae"] = json_formulae.to_h do |json_formula| | 
					
						
							|  |  |  |             json_formula["aliases"].each do |alias_name| | 
					
						
							|  |  |  |               cache["aliases"][alias_name] = json_formula["name"] | 
					
						
							| 
									
										
										
										
											2021-12-07 00:13:56 +00:00
										 |  |  |             end | 
					
						
							| 
									
										
										
										
											2023-02-16 21:49:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             [json_formula["name"], json_formula.except("name")] | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           updated | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         private :download_and_cache_data! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         sig { returns(Hash) } | 
					
						
							|  |  |  |         def all_formulae | 
					
						
							|  |  |  |           unless cache.key?("formulae") | 
					
						
							|  |  |  |             json_updated = download_and_cache_data! | 
					
						
							|  |  |  |             write_names_and_aliases(regenerate: json_updated) | 
					
						
							| 
									
										
										
										
											2021-12-07 00:13:56 +00:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2023-02-16 21:49:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |           cache["formulae"] | 
					
						
							| 
									
										
										
										
											2021-12-07 00:13:56 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2022-09-14 23:54:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         sig { returns(Hash) } | 
					
						
							|  |  |  |         def all_aliases | 
					
						
							| 
									
										
										
										
											2023-02-16 21:49:03 +00:00
										 |  |  |           unless cache.key?("aliases") | 
					
						
							|  |  |  |             json_updated = download_and_cache_data! | 
					
						
							|  |  |  |             write_names_and_aliases(regenerate: json_updated) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           cache["aliases"] | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         sig { params(regenerate: T::Boolean).void } | 
					
						
							|  |  |  |         def write_names_and_aliases(regenerate: false) | 
					
						
							|  |  |  |           download_and_cache_data! unless cache.key?("formulae") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           return unless Homebrew::API.write_names_file(all_formulae.keys, "formula", regenerate: regenerate) | 
					
						
							| 
									
										
										
										
											2022-09-14 23:54:14 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-16 21:49:03 +00:00
										 |  |  |           (HOMEBREW_CACHE_API/"formula_aliases.txt").open("w") do |file| | 
					
						
							|  |  |  |             all_aliases.each do |alias_name, real_name| | 
					
						
							|  |  |  |               file.puts "#{alias_name}|#{real_name}" | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2022-09-14 23:54:14 -04:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2021-08-06 02:30:44 -04:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |