157 lines
2.9 KiB
Ruby
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
|