#!/usr/bin/env ruby # ADN CLI v2 - Generador de proyectos y planes # Uso: # ./adn/tools/run proy crear P2605 # ./adn/tools/run plan crear P2605.01.01 require 'fileutils' require 'date' module ADN # ========================= # UTILIDADES # ========================= module Utils def self.today Date.today.strftime('%Y-%m-%d') end def self.ensure_dir(path) FileUtils.mkdir_p(path) unless Dir.exist?(path) end end # ========================= # TEMPLATE ENGINE # ========================= module Templates def self.proyecto(codigo) <<~MD # #{codigo} - Nombre del Proyecto **Tipo:** Proyecto **Código:** #{codigo} **Versión:** 1.0 **Estado:** ⏳ Planificado **Fecha de creación:** #{Utils.today} ## 🎯 Objetivo Describir objetivo. ## 📦 Alcance - Incluye: - No incluye: ## 📅 Planes asociados - #{codigo}.01.01 ## 📚 Referencias - MD end def self.plan(codigo) <<~MD # #{codigo} - Nombre del Plan **Tipo:** Plan **Código:** #{codigo} **Versión:** 1.0 **Estado:** ⏳ Planificado **Fecha de creación:** #{Utils.today} ## 📋 Resumen Ejecutivo Descripción general. ## 🎯 Objetivo Objetivo del plan. ## 📅 Fases ### FASE 1 - [ ] Tarea 1 ## 🧪 Validación Cómo probar. ## 📊 Métricas - Métrica: Objetivo ## 🔄 Rollback - Escenario: Acción MD end end # ========================= # GENERADORES # ========================= class Generador BASE_PATH = "docs/proy" def self.crear_proyecto(codigo) path = "#{BASE_PATH}/#{codigo}" Utils.ensure_dir(path) file = "#{path}/#{codigo}.md" File.write(file, Templates.proyecto(codigo)) puts "✅ Proyecto creado: #{file}" end def self.crear_plan(codigo) proyecto = codigo.split('.').first path = "#{BASE_PATH}/#{proyecto}/plan" Utils.ensure_dir(path) file = "#{path}/#{codigo}.md" File.write(file, Templates.plan(codigo)) puts "✅ Plan creado: #{file}" end end # ========================= # CLI # ========================= class CLI def self.run(args) comando = args[0] accion = args[1] codigo = args[2] case comando when "proy" if accion == "crear" Generador.crear_proyecto(codigo) else puts "Acción no válida para proy" end when "plan" if accion == "crear" Generador.crear_plan(codigo) else puts "Acción no válida para plan" end else puts "Comando no reconocido" end end end end # ========================= # ENTRYPOINT # ========================= if __FILE__ == $0 ADN::CLI.run(ARGV) end