Principio "Menos es Más": código común centralizado en un solo lugar. Cambios: - Nuevo módulo Dron::Base con funcionalidad compartida: - logger: Logger compartido (evita crear múltiples instancias) - db_query: Ejecución de SQL con resultados - db_exec: Ejecución de SQL sin resultados - formato_duracion: Utilitario para formatear segundos - slice_safe: Slice seguro de strings - blank?: Verificación de strings vacíos/nulos - Todos los módulos atómicos (ejecutor, vigilante, sanador, bitacora) ahora usan Base.logger, Base.db_query, Base.db_exec Beneficios: - Un solo lugar para corregir errores comunes - Menos duplicación de código (~40% menos líneas) - Consistencia en manejo de logs y DB - Fácil extensión: nuevos drones heredan funcionalidad automática Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
66 lines
1.6 KiB
Ruby
66 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Dron::Base — Módulo base para todos los drones atómicos
|
|
# ========================================================
|
|
# Proporciona funcionalidad común para evitar duplicación.
|
|
# Se usa llamando directamente: Base.logger, Base.db_query, etc.
|
|
#
|
|
# Uso:
|
|
# require_relative 'base'
|
|
# class Dron::Ejecutor
|
|
# class << self
|
|
# def accion
|
|
# Base.logger.info("...")
|
|
# Base.db_query("SELECT ...")
|
|
# end
|
|
# end
|
|
# end
|
|
|
|
require_relative '../../core/logger'
|
|
require_relative '../../db/core/bitacora_db'
|
|
|
|
module Dron
|
|
module Base
|
|
module_function
|
|
|
|
def logger
|
|
@@logger ||= ADN::Logger.new
|
|
end
|
|
|
|
def db_query(sql, params = [])
|
|
BitacorasDB::BitacoraDB.with_connection { |db| db.execute(sql, params).to_a }
|
|
rescue PG::Error => e
|
|
logger.error("💥 PG Error: #{e.message}")
|
|
raise
|
|
rescue StandardError => e
|
|
logger.error("💥 Error: #{e.message}")
|
|
raise
|
|
end
|
|
|
|
def db_exec(sql, params = [])
|
|
BitacorasDB::BitacoraDB.with_connection { |db| db.execute(sql, params) }
|
|
rescue PG::Error => e
|
|
logger.error("💥 PG Error: #{e.message}")
|
|
raise
|
|
rescue StandardError => e
|
|
logger.error("💥 Error: #{e.message}")
|
|
raise
|
|
end
|
|
|
|
def formato_duracion(segundos)
|
|
minutos = (segundos / 60).to_i
|
|
secs = (segundos % 60).to_i
|
|
minutos > 0 ? "#{minutos}min #{secs}s" : "#{secs}s"
|
|
end
|
|
|
|
def blank?(str)
|
|
str.nil? || str.to_s.strip.empty?
|
|
end
|
|
|
|
def slice_safe(str, max = 50)
|
|
return '' if str.nil?
|
|
str.to_s.length > max ? "#{str.to_s[0...max]}..." : str.to_s
|
|
end
|
|
end
|
|
end
|