Sha256: 5dd0bb4eefe398e22dbaaf2f6ae232a24e517e5d88390f66cd60e96d3affab93

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

# frozen_string_literal: true

module Rcmdr
  module CommandHelp
    private

    # rubocop:disable Lint/UnusedMethodArgument
    def command_help_for(command:, desc:, namespaces: nil, long_desc: nil, options: {}, commands: []) # rubocop:disable Metrics/ParameterLists
      namespaces ||= command_namespaces
      help =
        <<~HELP
          #{namespaces&.join(' ')} #{command}#{' [OPTIONS]' if options&.any?} - #{desc}
          #{'OPTIONS:' if options&.any?}
          #{options_help_for options}
          #{'OPTION ALIASES:' if any_option_aliases_for?(options)}
          #{options_aliases_help_for options}
          #{'---' unless long_desc.blank?}
          #{long_desc}
        HELP
      help.gsub(/\n{2,}/, "\n")
    end
    # rubocop:enable Lint/UnusedMethodArgument

    def options_help_for(options)
      return [] if options.blank?

      options.map do |option, data|
        type = option_to_a(data[:type])&.join(' | ')
        type = :boolean if type.blank?
        "#{option} <#{type}>, default: #{data[:default]}"
      end.join("\n")
    end

    def options_aliases_help_for(options)
      return unless any_option_aliases_for?(options)

      options.filter_map do |option, data|
        aliases = option_to_a(data[:aliases])&.join(' | ')
        <<~HELP
          #{option} aliases: [#{aliases}]
        HELP
      end.join("\n")
    end

    def any_option_aliases_for?(options)
      return false if options.blank?

      options.keys.any? { |key| options.dig(key, :aliases).any? }
    end

    def option_to_a(option)
      return [] if option.blank?
      return option if option.is_a? Array

      [option]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rcmdr-0.1.1.pre.alpha lib/rcmdr/command_help.rb