| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | module Hbc::Scopes | 
					
						
							|  |  |  |   def self.included(base) | 
					
						
							|  |  |  |     base.extend(ClassMethods) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   module ClassMethods | 
					
						
							|  |  |  |     def all | 
					
						
							|  |  |  |       @all_casks ||= {} | 
					
						
							|  |  |  |       all_tokens.map { |t| @all_casks[t] ||= load(t) } | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def all_tapped_cask_dirs | 
					
						
							| 
									
										
										
										
											2016-08-25 05:19:14 +02:00
										 |  |  |       Tap.map(&:cask_dir).compact | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def all_tokens | 
					
						
							| 
									
										
										
										
											2016-08-25 05:19:14 +02:00
										 |  |  |       Tap.map { |t| | 
					
						
							|  |  |  |         t.cask_files.map { |p| | 
					
						
							|  |  |  |           "#{t.name}/#{File.basename(p, ".rb")}" | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }.flatten | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def installed | 
					
						
							|  |  |  |       # Hbc.load has some DWIM which is slow.  Optimize here | 
					
						
							|  |  |  |       # by spoon-feeding Hbc.load fully-qualified paths. | 
					
						
							|  |  |  |       # TODO: speed up Hbc::Source::Tapped (main perf drag is calling Hbc.all_tokens repeatedly) | 
					
						
							|  |  |  |       # TODO: ability to specify expected source when calling Hbc.load (minor perf benefit) | 
					
						
							|  |  |  |       Pathname.glob(caskroom.join("*")) | 
					
						
							|  |  |  |               .map { |caskroom_path| | 
					
						
							|  |  |  |                 token = caskroom_path.basename.to_s | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 path_to_cask = all_tapped_cask_dirs.find { |tap_dir| | 
					
						
							|  |  |  |                   tap_dir.join("#{token}.rb").exist? | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if path_to_cask | 
					
						
							|  |  |  |                   Hbc.load(path_to_cask.join("#{token}.rb")) | 
					
						
							|  |  |  |                 else | 
					
						
							|  |  |  |                   Hbc.load(token) | 
					
						
							|  |  |  |                 end | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |