Refactor(ADN): Migración de tools/adn a adn/tools en busca de la Armonía Integral del DIIAA
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'optparse'
|
||||
require_relative '../core/colores'
|
||||
require_relative '../core/validador'
|
||||
|
||||
class SubcomandoValidador
|
||||
def initialize(args, logger)
|
||||
@args = args
|
||||
@logger = logger
|
||||
@opciones = { watch: false, fix: false }
|
||||
end
|
||||
|
||||
def ejecutar
|
||||
parser = OptionParser.new do |opts|
|
||||
opts.banner = "Uso: ./adn/tools/run validador [OPCIONES]"
|
||||
opts.separator ""
|
||||
opts.separator "Valida el cumplimiento del ADN en las bitácoras"
|
||||
opts.separator ""
|
||||
opts.separator "Opciones:"
|
||||
opts.on("--watch", "Monitorizar cambios en tiempo real") do
|
||||
@opciones[:watch] = true
|
||||
end
|
||||
opts.on("--fix", "Intentar corregir errores automáticamente") do
|
||||
@opciones[:fix] = true
|
||||
end
|
||||
opts.on("-h", "--help", "Mostrar esta ayuda") do
|
||||
puts opts
|
||||
exit
|
||||
end
|
||||
end
|
||||
|
||||
begin
|
||||
parser.parse!(@args)
|
||||
rescue OptionParser::InvalidOption => e
|
||||
@logger.error("Opción inválida: #{e.message}")
|
||||
puts parser
|
||||
exit 1
|
||||
end
|
||||
|
||||
@logger.info("Iniciando validador del ADN", @opciones)
|
||||
|
||||
if @opciones[:watch]
|
||||
@logger.info("Modo watch activado (no implementado aún)")
|
||||
puts "#{Color::YELLOW}⚠ El modo watch será implementado en Fase 1 completa#{Color::RESET}"
|
||||
# TODO: Implementar con gem 'listen'
|
||||
end
|
||||
|
||||
# Inicializar validador
|
||||
validador = ADN::Validador.new(nil, @logger)
|
||||
|
||||
# Ejecutar validación
|
||||
resultados = validador.validar_bitacoras(@opciones)
|
||||
|
||||
# Mostrar resultados
|
||||
mostrar_resultados(resultados, validador)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def mostrar_resultados(resultados, validador)
|
||||
total = resultados[:total]
|
||||
validas = resultados[:validas]
|
||||
con_errores = resultados[:con_errores]
|
||||
con_advertencias = resultados[:con_advertencias]
|
||||
|
||||
puts "\n#{Color::CYAN}📊 Resultados de validación:#{Color::RESET}"
|
||||
puts "#{Color::DIM}#{'-' * 60}#{Color::RESET}"
|
||||
puts " #{Color::GREEN}Bitácoras totales:#{Color::RESET} #{total}"
|
||||
puts " #{Color::GREEN}Válidas:#{Color::RESET} #{validas}"
|
||||
|
||||
if con_errores > 0
|
||||
puts " #{Color::RED}Con errores:#{Color::RESET} #{con_errores}"
|
||||
else
|
||||
puts " #{Color::GREEN}Con errores:#{Color::RESET} 0"
|
||||
end
|
||||
|
||||
if con_advertencias > 0
|
||||
puts " #{Color::YELLOW}Con advertencias:#{Color::RESET} #{con_advertencias}"
|
||||
else
|
||||
puts " #{Color::GREEN}Con advertencias:#{Color::RESET} 0"
|
||||
end
|
||||
|
||||
# Mostrar detalles de errores y advertencias
|
||||
mostrar_detalles(resultados[:detalles])
|
||||
|
||||
# Resumen final
|
||||
if con_errores == 0 && con_advertencias == 0
|
||||
@logger.exito("Validación completada: #{total} bitácoras OK")
|
||||
puts "#{Color::GREEN}✓ Todas las bitácoras cumplen con el formato del ADN#{Color::RESET}"
|
||||
elsif con_errores == 0
|
||||
@logger.advertencia("Validación completada con advertencias")
|
||||
puts "#{Color::YELLOW}⚠ Validación completada con #{con_advertencias} advertencia(s)#{Color::RESET}"
|
||||
else
|
||||
@logger.error("Validación completada con errores")
|
||||
puts "#{Color::RED}✗ Validación completada con #{con_errores} error(es) y #{con_advertencias} advertencia(s)#{Color::RESET}"
|
||||
end
|
||||
|
||||
# Log de métricas
|
||||
@logger.info("Validación completada", {
|
||||
total_bitacoras: total,
|
||||
validas: validas,
|
||||
con_errores: con_errores,
|
||||
con_advertencias: con_advertencias,
|
||||
correcciones: validador.correcciones
|
||||
})
|
||||
end
|
||||
|
||||
def mostrar_detalles(detalles)
|
||||
detalles.each do |detalle|
|
||||
archivo = detalle[:archivo]
|
||||
errores = detalle[:errores]
|
||||
advertencias = detalle[:advertencias]
|
||||
|
||||
next if errores.empty? && advertencias.empty?
|
||||
|
||||
puts "\n#{Color::DIM}#{archivo}#{Color::RESET}"
|
||||
|
||||
errores.each do |error|
|
||||
puts " #{Color::RED}✗ #{error}#{Color::RESET}"
|
||||
end
|
||||
|
||||
advertencias.each do |advertencia|
|
||||
puts " #{Color::YELLOW}⚠ #{advertencia}#{Color::RESET}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user