Sha256: 54ae81d80c4c81269e49d8e53288a8093d395a9f7be4cb65540207d31c4e9cb3

Contents?: true

Size: 1.81 KB

Versions: 5

Compression:

Stored size: 1.81 KB

Contents

# frozen_string_literal: true

module Dsu
  module Support
    module Commander
      module CommandHelp
        private

        # rubocop:disable Lint/UnusedMethodArgument
        def command_help_for(command:, desc:, namespaces: nil, long_desc: nil, options: {}, commands: [])
          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
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
dsu-0.1.0.alpha.5 lib/dsu/support/commander/command_help.rb
dsu-0.1.0.alpha.4 lib/dsu/support/commander/command_help.rb
dsu-0.1.0.alpha.3 lib/dsu/support/commander/command_help.rb
dsu-0.1.0.alpha.2 lib/dsu/support/commander/command_help.rb
dsu-0.1.0.alpha.1 lib/dsu/support/commander/command_help.rb