# frozen_string_literal: true # adn/tools/core/help_formatter.rb - Formateador de ayuda estandarizado # ====================================================================== # Helper reutilizable para formateo consistente de --help en CLI require_relative 'colores' module ADN module HelpFormatter module_function def format_header(titulo, descripcion = nil) lines = [] lines << "#{Color::BOLD}#{titulo}#{Color::RESET}" lines << "#{Color::DIM}#{'=' * titulo.length}#{Color::RESET}" if descripcion lines << "" lines << "#{Color::CYAN}#{descripcion}#{Color::RESET}" if descripcion lines << "" lines.join("\n") end def format_usage(comando, formato) "Uso: #{Color::YELLOW}#{comando}#{Color::RESET} #{formato}" end def format_option(opciones, descripcion, default = nil) opt_str = opciones.map { |o| o.length > 1 ? "--#{o}" : "-#{o}" }.join(', ') default_str = default ? " (default: #{default})" : "" " #{Color::GREEN}#{opt_str.ljust(20)}#{Color::RESET} #{descripcion}#{default_str}" end def format_example(comando, descripcion) "#{Color::DIM} $ #{comando}#{Color::RESET}\n #{Color::CYAN}#{descripcion}#{Color::RESET}" end def format_section(titulo) "\n#{Color::BOLD}#{titulo}#{Color::RESET}\n" end def generar_help(titulo:, descripcion:, uso:, opciones:, ejemplos: []) lines = [] lines << format_header(titulo, descripcion) lines << uso lines << "" if opciones.any? lines << format_section("Opciones:") opciones.each do |opt| lines << format_option(opt[:names], opt[:desc], opt[:default]) end end if ejemplos.any? lines << format_section("Ejemplos:") ejemplos.each do |ej| lines << format_example(ej[:cmd], ej[:desc]) end end lines.join("\n") end end end