CFDI
CFDI copied to clipboard
Refactor variables de clase
@unRob
Fíjate que necesito leer la información del nodo de nómina cuando esté presente, pero esto me plantea varios problemas ya que si agrego una sección de nómina directamente en el comprobante, se modificaría el resultado de #to_h
para todos los comprobantes, incluso los que no tienen el nodo nómina.
Una de las alternativas en las que pensé es una especialización de la clase Comprobante
, y tener una clase ComprobanteNomina
que herede de Comprobante
e incluya los datos de la nómina únicamente en esa clase. Desafortunadamente, la presencia de las variables de clase @@datosCadena
y @@data
impiden que la herencia sea una opción viable porque afectan a ambas clases y cualquier modificación que les haga a esas variables en ComprobanteNomina
también afecta a Comprobante
y me deja en las mismas.
Para sortear ese problema y de paso librarnos de esas variables de clase que suelen ser un dolor de cabeza, empecé este refactor que en lugar de utilizar variables de clase, utiliza métodos (de instancia) para definir los mismos valores, con la ventaja de que los métodos sí pueden ser sobreescritos sin problemas en una subclase, e incluso heredar los atributos de la superclase.
Tendríamos, por ejemplo:
class ComprobanteNomina < Comprobante
def atributos
super + [:nomina]
end
end
Para conseguir que se siguieran teniendo los accessors a las variables, utilicé el trucazo de crear un módulo anónimo e incluirlo a la clase Comprobante
al momento de instanciar un objeto.
En el camino, aproveché para agregar algunas pruebas y corregir algunos detalles menores.
¿Cómo ves el PR? Si lo apruebas, se puede mezclar y ya sobre esto empiezo a agregar la funcionalidad de nómina.