56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module Cask
 | |
|   class Cmd
 | |
|     class Help < AbstractCommand
 | |
|       def run
 | |
|         if args.empty?
 | |
|           puts self.class.purpose
 | |
|           puts
 | |
|           puts self.class.usage
 | |
|         elsif args.count == 1
 | |
|           command_name = args.first
 | |
| 
 | |
|           unless command = self.class.commands[command_name]
 | |
|             raise "No help information found for command '#{command_name}'."
 | |
|           end
 | |
| 
 | |
|           if command.respond_to?(:usage)
 | |
|             puts command.usage
 | |
|           else
 | |
|             puts command.help
 | |
|           end
 | |
|         else
 | |
|           raise ArgumentError, "#{self.class.command_name} only takes up to one argument."
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       def self.purpose
 | |
|         <<~EOS
 | |
|           Homebrew Cask provides a friendly CLI workflow for the administration
 | |
|           of macOS applications distributed as binaries.
 | |
|         EOS
 | |
|       end
 | |
| 
 | |
|       def self.commands
 | |
|         Cmd.command_classes.select(&:visible?).map { |klass| [klass.command_name, klass] }.to_h
 | |
|       end
 | |
| 
 | |
|       def self.usage
 | |
|         max_command_len = Cmd.commands.map(&:length).max
 | |
| 
 | |
|         "Commands:\n" +
 | |
|           Cmd.command_classes
 | |
|              .select(&:visible?)
 | |
|              .map { |klass| "    #{klass.command_name.ljust(max_command_len)}  #{klass.help}\n" }
 | |
|              .join +
 | |
|           %Q(\nSee also "man brew-cask")
 | |
|       end
 | |
| 
 | |
|       def self.help
 | |
|         "print help strings for commands"
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | 
