Module: Dry::CLI::Usage Private
- Defined in:
- lib/dry/cli/usage.rb
Overview
This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.
Command(s) usage
Constant Summary collapse
- SUBCOMMAND_BANNER =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
" [SUBCOMMAND]"
- ROOT_COMMAND_WITH_SUBCOMMANDS_BANNER =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
" [ARGUMENT|SUBCOMMAND]"
Class Method Summary collapse
- .arguments(command) ⇒ Object private
- .call(result) ⇒ Object private
- .command_name(result, name) ⇒ Object private
- .commands(result) ⇒ Object private
- .commands_and_arguments(result) ⇒ Object private
- .description(command) ⇒ Object private
- .justify(string, padding, usage) ⇒ Object private
Class Method Details
.arguments(command) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
52 53 54 55 56 57 58 59 60 61 62 63 |
# 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 Layout/LineLength optional = optional_arguments.map { |arg| "[#{arg.name.upcase}]" }.join(" ") if optional_arguments.any? # rubocop:disable Layout/LineLength result = [required, optional].compact " #{result.join(" ")}" unless result.empty? end |
.call(result) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
19 20 21 22 23 24 25 26 27 |
# File 'lib/dry/cli/usage.rb', line 19 def self.call(result) header = "Commands:" max_length, commands = commands_and_arguments(result) commands.map do |, node| usage = description(node.command) if node.leaf? "#{justify(, max_length, usage)}#{usage}" end.unshift(header).join("\n") end |
.command_name(result, name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
89 90 91 |
# File 'lib/dry/cli/usage.rb', line 89 def self.command_name(result, name) ProgramName.call([result.names, name]) end |
.commands(result) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
83 84 85 |
# File 'lib/dry/cli/usage.rb', line 83 def self.commands(result) result.children.sort_by { |name, _| name } end |
.commands_and_arguments(result) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# 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) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
67 68 69 70 71 |
# 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) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
75 76 77 78 79 |
# 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 |