module Dry::CLI::Usage
Command(s) usage
@since 0.1.0 @api private
Constants
- ROOT_COMMAND_WITH_SUBCOMMANDS_BANNER
- SUBCOMMAND_BANNER
@since 0.1.0 @api private
Public Class Methods
arguments(command)
click to toggle source
@since 0.1.0 @api private
# File lib/dry/cli/usage.rb, line 52 def self.arguments(command) return unless CLI.command?(command) required_arguments = command.required_arguments optional_arguments = command.optional_arguments required = required_arguments.map { |arg| arg.name.upcase }.join(" ") if required_arguments.any? # rubocop:disable Metrics/LineLength optional = optional_arguments.map { |arg| "[#{arg.name.upcase}]" }.join(" ") if optional_arguments.any? # rubocop:disable Metrics/LineLength result = [required, optional].compact " #{result.join(" ")}" unless result.empty? end
call(result)
click to toggle source
@since 0.1.0 @api private
# File lib/dry/cli/usage.rb, line 19 def self.call(result) header = "Commands:" max_length, commands = commands_and_arguments(result) commands.map do |banner, node| usage = description(node.command) if node.leaf? "#{justify(banner, max_length, usage)}#{usage}" end.unshift(header).join("\n") end
command_name(result, name)
click to toggle source
@since 0.1.0 @api private
# File lib/dry/cli/usage.rb, line 89 def self.command_name(result, name) ProgramName.call([result.names, name]) end
commands(result)
click to toggle source
@since 0.1.0 @api private
# File lib/dry/cli/usage.rb, line 83 def self.commands(result) result.children.sort_by { |name, _| name } end
commands_and_arguments(result)
click to toggle source
@since 0.1.0 @api private
# File lib/dry/cli/usage.rb, line 31 def self.commands_and_arguments(result) max_length = 0 ret = commands(result).each_with_object({}) do |(name, node), memo| args = if node.command && node.leaf? && node.children? ROOT_COMMAND_WITH_SUBCOMMANDS_BANNER elsif node.leaf? arguments(node.command) else SUBCOMMAND_BANNER end partial = " #{command_name(result, name)}#{args}" max_length = partial.bytesize if max_length < partial.bytesize memo[partial] = node end [max_length, ret] end
description(command)
click to toggle source
@since 0.1.0 @api private
# File lib/dry/cli/usage.rb, line 67 def self.description(command) return unless CLI.command?(command) " # #{command.description}" unless command.description.nil? end
justify(string, padding, usage)
click to toggle source
@since 0.1.0 @api private
# File lib/dry/cli/usage.rb, line 75 def self.justify(string, padding, usage) return string.chomp(" ") if usage.nil? string.ljust(padding + padding / 2) end