safe_monkey_patching

Przykład

module ActiveJob
  class Base
    class << self
      monkey_patch :deserialize

      def deserialize(job_data)
        # ...
      end
    end
  end
end

metoda #monkey_patch generuje hash kodu źródłowego #deserialize (tej oryginalnej) i zapisze go do pliku

---
ActiveJob::Core::ClassMethods:
  deserialize:
    sha1: c29634da4f1731775868a6eba5efc837dd711a54

a więc, gdy podbijemy railsy i zmieni się kod źródłowy, to gif diff nam o tym powie 🤩


diff --git a/monkey_patches-old.yml b/monkey_patches-old.yml

 ActiveJob::Core::ClassMethods:
   deserialize:
-    sha1: c29634da4f1731775868a6eba5efc837dd711a54
+    sha1: 131d3acf24768b30a3ccb1052591b1cdb603f0cd

Również pokażą się pliki monkey_patches-old.yml i WRONG_MONKEY_PATCHES.txt, który pokazuje niekompatybilności z gemów.

Aby zaktualizować łatki, to trzeba zcomitować monkey_patches-old.yml i będzie :ok:.

Dzięki temu gemu nie będzie trzeba pamiętać o przejrzeniu patchów przy podbijaniu gemów 🥳