Как создать безопасный, обратно совместимый «reverse-monkeypatch» на Ruby?

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

  •  22-08-2019
  •  | 
  •  

Вопрос

Если ваш коллега «открывает» («monkeypatches») класс в Ruby и переопределяет некоторые важные функции, которые вам нужно использовать, как вы можете получить доступ к этой исходной функциональности, предварительно исправленной Monkeypatches, не нарушая систему, которая уже зависит от его определений, исправленных обезьяной? ?

Это было полезно?

Решение

Учитывая пример переопределения метода, если вы можете загрузить некоторый код до загрузки его обезьяньего патча, вы можете использовать псевдоним для метода.

class Fixnum
  alias_method :original_plus, :+
end

class Fixnum
  def +(x)
    self - x
  end
end

>> 5 + 3
=> 2
>> 5.original_plus(3)
=> 8

Другие советы

Недавно я видел это в канале Rubyflow — это простая библиотека, которая позволяет вам использовать константы верхнего уровня пространства имен, называемые айкидока.Без каких-либо подробностей о том, как/что исправляет обезьяна, помочь сложно.Теоретически вы могли бы использовать подобный подход для создания пространства имен версии класса, исправленной обезьяной, чтобы вы могли независимо обращаться как к ней, так и к оригиналу.

Зависит, какая именно функциональность была изменена и каким образом, но что-то вроде реализации Джима Винриха Чистый лист класс может помочь:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top