59 lines
1.9 KiB
Ruby
59 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative 'plantillas'
|
|
|
|
module ADN
|
|
class GeneradorProy
|
|
def self.nuevo(tipo, titulo, opciones)
|
|
unless Plantillas.existe?(tipo)
|
|
puts "✗ Tipo inválido: #{tipo}"
|
|
return
|
|
end
|
|
|
|
titulo_base = titulo
|
|
titulo_base = tipo.capitalize if titulo_base.nil? || titulo_base.empty?
|
|
|
|
# Remover espacios para el filename manteniendo legibilidad
|
|
titulo_archivo = titulo_base.gsub(/\s+/, '-')
|
|
|
|
proy_id = opciones[:proy]
|
|
fase_id = opciones[:fase]
|
|
|
|
# Construir el prefijo del nombre del archivo
|
|
prefijos = []
|
|
prefijos << proy_id if proy_id && proy_id.is_a?(String) && !proy_id.empty?
|
|
prefijos << fase_id if fase_id && fase_id.is_a?(String) && !fase_id.empty?
|
|
|
|
prefijo_str = prefijos.empty? ? "" : "#{prefijos.join('.')}_"
|
|
|
|
nombre_archivo = "#{prefijo_str}#{titulo_archivo}.md"
|
|
|
|
# Determinar el directorio de destino
|
|
dir_base = File.expand_path('../../../docs/proy', __dir__)
|
|
FileUtils.mkdir_p(dir_base) unless Dir.exist?(dir_base)
|
|
|
|
destino_dir = dir_base
|
|
|
|
if proy_id && proy_id.is_a?(String) && !proy_id.empty?
|
|
# Buscar carpetas que coincidan con el patrón P2601*
|
|
require 'fileutils'
|
|
coincidencias = Dir.glob(File.join(dir_base, "#{proy_id}*")).select { |f| File.directory?(f) }
|
|
|
|
if coincidencias.any?
|
|
destino_dir = coincidencias.first
|
|
else
|
|
# Crear directorio P2601_Nombre (si hay titulo le ponemos el titulo, sino solo P2601)
|
|
destino_dir = File.join(dir_base, "#{proy_id}_#{titulo_archivo}")
|
|
FileUtils.mkdir_p(destino_dir)
|
|
end
|
|
end
|
|
|
|
ruta_completa = File.join(destino_dir, nombre_archivo)
|
|
contenido = Plantillas.obtener(tipo)
|
|
|
|
File.write(ruta_completa, contenido)
|
|
puts "✓ Archivo generado: #{ruta_completa}"
|
|
end
|
|
end
|
|
end
|