 d69c3ef3df
			
		
	
	
		d69c3ef3df
		
			
		
	
	
	
	
		
			
			Let's resolve the intermittent issues we've seen when various installed on demand gems cannot be installed by including them all in the Gemfile.
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # typed: true
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| require "formulary"
 | |
| require "cask/cask_loader"
 | |
| require "cli/parser"
 | |
| 
 | |
| class String
 | |
|   def f(*args)
 | |
|     Formulary.factory(self, *args)
 | |
|   end
 | |
| 
 | |
|   def c(config: nil)
 | |
|     Cask::CaskLoader.load(self, config: config)
 | |
|   end
 | |
| end
 | |
| 
 | |
| class Symbol
 | |
|   def f(*args)
 | |
|     to_s.f(*args)
 | |
|   end
 | |
| 
 | |
|   def c(config: nil)
 | |
|     to_s.c(config: config)
 | |
|   end
 | |
| end
 | |
| 
 | |
| module Homebrew
 | |
|   extend T::Sig
 | |
| 
 | |
|   module_function
 | |
| 
 | |
|   sig { returns(CLI::Parser) }
 | |
|   def irb_args
 | |
|     Homebrew::CLI::Parser.new do
 | |
|       description <<~EOS
 | |
|         Enter the interactive Homebrew Ruby shell.
 | |
|       EOS
 | |
|       switch "--examples",
 | |
|              description: "Show several examples."
 | |
|       switch "--pry",
 | |
|              env:         :pry,
 | |
|              description: "Use Pry instead of IRB. Implied if `HOMEBREW_PRY` is set."
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def irb
 | |
|     # work around IRB modifying ARGV.
 | |
|     args = irb_args.parse(ARGV.dup.freeze)
 | |
| 
 | |
|     clean_argv
 | |
| 
 | |
|     if args.examples?
 | |
|       puts <<~EOS
 | |
|         'v8'.f # => instance of the v8 formula
 | |
|         :hub.f.latest_version_installed?
 | |
|         :lua.f.methods - 1.methods
 | |
|         :mpd.f.recursive_dependencies.reject(&:installed?)
 | |
| 
 | |
|         'vlc'.c # => instance of the vlc cask
 | |
|         :tsh.c.livecheckable?
 | |
|       EOS
 | |
|       return
 | |
|     end
 | |
| 
 | |
|     if args.pry?
 | |
|       require "pry"
 | |
|     else
 | |
|       require "irb"
 | |
|     end
 | |
| 
 | |
|     require "formula"
 | |
|     require "keg"
 | |
|     require "cask"
 | |
| 
 | |
|     ohai "Interactive Homebrew Shell", "Example commands available with: `brew irb --examples`"
 | |
|     if args.pry?
 | |
|       Pry.config.should_load_rc = false # skip loading .pryrc
 | |
|       Pry.config.history_file = "#{Dir.home}/.brew_pry_history"
 | |
|       Pry.config.memory_size = 100 # max lines to save to history file
 | |
|       Pry.config.prompt_name = "brew"
 | |
| 
 | |
|       Pry.start
 | |
|     else
 | |
|       ENV["IRBRC"] = (HOMEBREW_LIBRARY_PATH/"brew_irbrc").to_s
 | |
| 
 | |
|       IRB.start
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   # Remove the `--debug`, `--verbose` and `--quiet` options which cause problems
 | |
|   # for IRB and have already been parsed by the CLI::Parser.
 | |
|   def clean_argv
 | |
|     global_options = Homebrew::CLI::Parser
 | |
|                      .global_options
 | |
|                      .flat_map { |options| options[0..1] }
 | |
|     ARGV.reject! { |arg| global_options.include?(arg) }
 | |
|   end
 | |
| end
 |