¿Cómo se puede hacer un “monkeypatch inversa” compatible hacia atrás segura en Ruby?
-
22-08-2019 - |
Pregunta
Si su compañero de trabajo "se abre" ( "monkeypatches") una clase en Ruby y redefine algunas funciones importantes que necesita utilizar, ¿cómo acceder esa funcionalidad pre-monkeypatched original sin romper un sistema que ya se basa / tiene dependencias en sus definiciones monkeypatched?
Solución
Teniendo en cuenta el ejemplo del método predominante, si se puede conseguir un poco de código cargado antes de cargar el parche del mono a continuación, puede crear un alias del método.
class Fixnum
alias_method :original_plus, :+
end
class Fixnum
def +(x)
self - x
end
end
>> 5 + 3
=> 2
>> 5.original_plus(3)
=> 8
Otros consejos
Hace poco vi esto en la alimentación rubyflow - es una biblioteca simple que le deja espacio de nombres constantes de nivel superior llamado aikidokas . Sin ningún tipo de detalles de cómo / qué se está parcheado mono es un poco difícil de ayudar. En teoría, aunque se puede utilizar un enfoque como este espacio de nombres para la versión mono-parcheado de la clase para que pueda acceder tanto ella como el original de manera independiente.
Depende exactamente lo que la funcionalidad se cambió y de qué manera, pero algo implementar como Jim Wienrich de BlankSlate clase puede ayudar a: