module Hanami::CLI::Usage

Command(s) usage

@since 0.1.0 @api private

Constants

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/hanami/cli/usage.rb, line 47
def self.arguments(command) # rubocop:disable Metrics/AbcSize
  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?
  optional = optional_arguments.map { |arg| "[#{arg.name.upcase}]" }.join(' ') if optional_arguments.any?
  result = [required, optional].compact

  " #{result.join(' ')}" unless result.empty?
end
call(result, out) click to toggle source

@since 0.1.0 @api private

# File lib/hanami/cli/usage.rb, line 16
def self.call(result, out)
  out.puts "Commands:"
  max_length, commands = commands_and_arguments(result)

  commands.each do |banner, node|
    usage = description(node.command) if node.leaf?
    out.puts "#{justify(banner, max_length, usage)}#{usage}"
  end
end
command_name(result, name) click to toggle source

@since 0.1.0 @api private

# File lib/hanami/cli/usage.rb, line 84
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/hanami/cli/usage.rb, line 78
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/hanami/cli/usage.rb, line 28
def self.commands_and_arguments(result) # rubocop:disable Metrics/MethodLength
  max_length = 0
  ret        = commands(result).each_with_object({}) do |(name, node), memo|
    args = if 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/hanami/cli/usage.rb, line 62
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/hanami/cli/usage.rb, line 70
def self.justify(string, padding, usage)
  return string.chomp(" ") if usage.nil?

  string.ljust(padding + padding / 2)
end