Monkey Patching

Monkey Patch - это динамическое изменение класса, что означает добавление новых или перезапись существующих методов во время выполнения(runtime). При использовании этой функции, необходимо лишь вносить изменения в класс, а не нарушать его первоначальную функциональность, поскольку внесение изменений приводит к переопределению исходных методов.

Основные свойства Monkey Patch -

  • 1) Если несколько библиотек имеют один и тот же метод, первый будет перезаписан.
  • 2) Если класс не импортирован до применения патча, это приведет к переопределению класса вместо его изменения.
  • 3) Все патчи носят глобальный характер и могут фактически нарушить работу нескольких библиотек.
  • 4) Monkey Patch используется для изменения классов, принадлежащих программисту, и не рекомендуется изменять уже определенные в Ruby классы, которые часто используются, такие как хэши, списки и т. д.
# Общий синтаксис патчинга
class [class_name]
def [method_to_patch]
#do_something
end
end

Ниже пример для блокировки возможности изменить направление строки -

# Before applying patching
puts "ARTEM".reverse
# => METRA

# Apply patching
class String
def reverse
"Reversing blocked!!"
end
end

# After applying patching
puts "ARTEM".reverse
#=> Reversing blocked!!