Использование Refinements в Ruby
Одна из самых мощных и в то же время безумных идей в Ruby это Monkey patching. При этом основным его недостатком является то, что его применение распространяется на весь ваш проект и гемы, которые вы на данный момент используете. Но основное преимущество Ruby в том, что он позволяет прийти к компромиссу в данной проблеме и использовать Monkey patching только в ограниченной области. Для этого вам нужно воспользоваться Refinements: определить методы в модуле через конструкцию `refine Class do … end` и подключить его, используя метод `using`. Но начиная с Ruby 3.1 вы можете добавить методы из модуля, используя `import_methods`: ``` module StringExt module Methods def blank? = self.nil? || self.empty? def present? = !blank? end refine String do import_methods Methods end end class SomeClass using StringExt def some_method "".blank? end end SomeClass.new.some_method # => true ```
А вы используете Refinements в своих проектах? Или продолжаете патчить классы глобально?