CFDI icon indicating copy to clipboard operation
CFDI copied to clipboard

Refactor variables de clase

Open apux opened this issue 9 years ago • 0 comments

@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.

apux avatar Sep 09 '15 21:09 apux