Comment pouvez-vous faire un coffre-fort, rétrocompatible « reverse-monkey-patch » en Ruby?

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

  •  22-08-2019
  •  | 
  •  

Question

Si votre collègue de travail « ouvre » ( « monkeypatches ») une classe en Ruby et redéfinit certaines fonctionnalités importantes que vous devez utiliser, comment avez-vous accès que la fonctionnalité pré-monkeypatched d'origine sans casser un système qui repose déjà / a des dépendances sur ses définitions monkeypatched?

Était-ce utile?

La solution

Étant donné l'exemple de la méthode primordiale, si vous pouvez obtenir un code chargé avant son patch de singe est chargé, vous pouvez créer un alias pour la méthode.

class Fixnum
  alias_method :original_plus, :+
end

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

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

Autres conseils

J'ai vu récemment ce dans le flux rubyflow - sa bibliothèque simple qui vous permet de l'espace de noms des constantes de haut niveau appelé aikidoka . Sans aucun détails sur la façon / ce qui est le singe patché il est un peu difficile à aider. En théorie, si vous pouvez utiliser une approche comme celle-ci namespace la version de singe-patchée de la classe afin que vous puissiez accéder à la fois et l'origine indépendamment.

Cela dépend exactement ce que la fonctionnalité a été changé et de quelle manière, mais quelque chose comme la mise en œuvre Jim Wienrich

scroll top