¿Cómo se puede hacer un “monkeypatch inversa” compatible hacia atrás segura en Ruby?

StackOverflow https://stackoverflow.com/questions/871548

  •  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?

¿Fue útil?

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:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top