Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!27.02.2025
Три приклади використання манкіпатчингу в Ruby
В Ruby можна на ходу замінити будь-який метод та отримати доступ до майже кожного атрибута. Причому зробити це хоч на рівні класу, хоч для конкретного обʼєкта з instance_eval. Звучить як щось дике, але насправді це гарний інструмент, яким ми цим користуємося постійно. Ось кілька прикладів:
-
Для ізоляції тестового екземпляра. Бібліотека rspec-mocks та інші побудовані на тому, що в Ruby без всякого Dependency Injection можна замінити окремі властивості або поведінку обʼєктів. Інколи це прямо уможливлює написання тестів там, де в іншій мові їх було б надто дорого писати.
-
Для виправлення помилок в бібліотеках. От знайшли ви, що чужий код працює неправильно (або з небажаними ефектами.) В Ruby можна відкрити чужий клас та замінити в ньому потрібний метод — прямо з власного коду. Так можна почати працювати з виправленим кодом вже сьогодні, а не чекати, поки виправлення приймуть автори. Також для того не потрібно ані форкати, ані вендорити цю бібліотеку.
-
Для перевірки коду в продакшні. Коли потрібно щось швиденько перевірити, то зовсім не потрібно розгортувати цілу нову версію застосунку — достатньо одного скрипту, в якому можна відкрити будь-які класи та впровадити зміни. Це дуже зручно для профілювання, або швидкого пошуку помилок.