Files
dtic-DIIAA/docs/proy/adn_cli_v2.rb
T

157 lines
2.9 KiB
Ruby

#!/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