Как сделать безопасный, обратно совместимый «reverse-monkeypatch» в Ruby? - PullRequest
4 голосов
/ 16 мая 2009

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

Ответы [ 3 ]

5 голосов
/ 16 мая 2009

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

class Fixnum
  alias_method :original_plus, :+
end

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

>> 5 + 3
=> 2
>> 5.original_plus(3)
=> 8
3 голосов
/ 16 мая 2009

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

0 голосов
/ 16 мая 2009

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

...