| 
									
										
										
										
											2025-02-26 13:26:37 +01:00
										 |  |  | # typed: strict | 
					
						
							|  |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-13 14:50:03 +00:00
										 |  |  | require "services/formula_wrapper" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module Services | 
					
						
							| 
									
										
										
										
											2025-02-26 13:26:37 +01:00
										 |  |  |   module Formulae | 
					
						
							|  |  |  |     # All available services, with optional filters applied | 
					
						
							|  |  |  |     # @private | 
					
						
							| 
									
										
										
										
											2025-03-13 14:50:03 +00:00
										 |  |  |     sig { params(loaded: T.nilable(T::Boolean), skip_root: T::Boolean).returns(T::Array[Services::FormulaWrapper]) } | 
					
						
							| 
									
										
										
										
											2025-02-26 13:26:37 +01:00
										 |  |  |     def self.available_services(loaded: nil, skip_root: false) | 
					
						
							|  |  |  |       require "formula" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       formulae = Formula.installed | 
					
						
							|  |  |  |                         .map { |formula| FormulaWrapper.new(formula) } | 
					
						
							|  |  |  |                         .select(&:service?) | 
					
						
							|  |  |  |                         .sort_by(&:name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       formulae = formulae.select { |formula| formula.loaded? == loaded } unless loaded.nil? | 
					
						
							|  |  |  |       formulae = formulae.reject { |formula| formula.owner == "root" } if skip_root | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       formulae | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # List all available services with status, user, and path to the file. | 
					
						
							|  |  |  |     sig { returns(T::Array[T::Hash[T.untyped, T.untyped]]) } | 
					
						
							|  |  |  |     def self.services_list | 
					
						
							|  |  |  |       available_services.map(&:to_hash) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |