Arquitectura antes: core/nodos_info.rb → usado por 4 CLIs core/ejecutor_remoto.rb → usado por proceso.rb core/triggers.rb → usado por triggers.rb core/eventos.rb → usado por triggers.rb core/configurador.rb → usado por backup.rb Arquitectura después: cli/nodos/info.rb ← submódulo de nodos cli/ssh/ejecutor.rb ← submódulo de ssh cli/triggers/motor.rb ← submódulo de triggers cli/triggers/eventos.rb ← submódulo de triggers cli/backup/configurador.rb ← submódulo de backup core/ queda limpio con solo infraestructura genuina: colores, constants, error_handler, logger, help_formatter, conciliador (transversal), validador (obsoleto) - 15 tests pasan sin regresiones - Evento 1078 (17:14→17:17)
51 lines
1.2 KiB
Ruby
51 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'yaml'
|
|
require 'fileutils'
|
|
|
|
module ADN
|
|
class Configurador
|
|
CONFIG_PATH = File.join(__dir__, '..', 'config', 'config.yml')
|
|
|
|
def self.leer
|
|
return {} unless File.exist?(CONFIG_PATH)
|
|
YAML.load_file(CONFIG_PATH) || {}
|
|
rescue StandardError => e
|
|
warn "Error leyendo configuración: #{e.message}"
|
|
{}
|
|
end
|
|
|
|
def self.guardar(config)
|
|
FileUtils.mkdir_p(File.dirname(CONFIG_PATH))
|
|
File.write(CONFIG_PATH, config.to_yaml)
|
|
true
|
|
rescue StandardError => e
|
|
warn "Error guardando configuración: #{e.message}"
|
|
false
|
|
end
|
|
|
|
def self.obtener(ruta_punto, default = nil)
|
|
config = leer
|
|
partes = ruta_punto.split('.')
|
|
valor = config
|
|
partes.each do |p|
|
|
valor = valor[p] if valor.is_a?(Hash)
|
|
return default if valor.nil?
|
|
end
|
|
valor
|
|
end
|
|
|
|
def self.establecer(ruta_punto, nuevo_valor)
|
|
config = leer
|
|
partes = ruta_punto.split('.')
|
|
temp = config
|
|
partes[0...-1].each do |p|
|
|
temp[p] ||= {}
|
|
temp = temp[p]
|
|
end
|
|
temp[partes.last] = nuevo_valor
|
|
guardar(config)
|
|
end
|
|
end
|
|
end
|