Чи траплялося вам робити одні й ті ж нудні правки в кількох Ruby файлах? Можливо, це додавання маршрутів, фільтрів контролерів чи налаштувань щоразу. Тоді я вирішив припинити страждати і навчити свої Ruby скрипти впроваджувати код як професіонали.
Я створив інструмент під назвою FlexibleInjector. Це маленький, але потужний інструмент, що допомагає автоматизувати ці рутинні завдання.
Коли ви працюєте з кількома додатками або мікросервісами, ви починаєте замислюватися, чи можна навчити свій код автоматично впроваджувати зміни в інший код. Rails вже має потужний інструмент під назвою inject_into_file
, який глибоко використовується в генераторах Rails, але він потребує правильного контексту та налаштувань.
Я вирішив покращити його, використовуючи файл YAML для опису, що, куди і як потрібно впроваджувати. Ось приклад конфігурації:
-
file: routes.rb
content: " root 'home#index'\n"
message: insert
after: "Rails.application.routes.draw do" -
file: applicationcontroller.rb
content: " beforeaction :authenticate_user!\n"
message: insert
before: "end" -
file: setup.rb
content: "# Setup done here\n"
message: append
Це дозволяє описати зміни, не турбуючись про складнощі коду. Тепер для впровадження цих змін достатньо лише викликати один інструмент.
За допомогою Ruby та бібліотеки Thor, я створив інструмент для автоматичного впровадження змін, який працює з YAML конфігураціями. Він читає файл конфігурації, визначає, що і куди потрібно впровадити, і виконуючи ці зміни в коді, використовує надійний метод inject_into_file
.
Це дуже простий інструмент, що дозволяє автоматизувати повторювані завдання. Ось що це дає:
- 💾 Декларативний підхід: Ви описуєте, що хочете змінити, а не як.
- 🔄 Повторне використання: Зберігайте фрагменти коду і використовувайте їх у різних проектах.
- 🧼 Безпечно: Використовує Thor’s надійний метод
inject_into_file
. - 🎯 Фокусовано: Не потрібні генератори або плагіни для Rails.
- 🔧 Розширювано: Легко інтегрується в будь-який автоматизаційний процес.
Цей інструмент вже скоро стане частиною Trix Genius, мого інструменту для автоматизації Ruby/Rails проектів. Це дозволить ще більше спростити налаштування, без необхідності вручну редагувати файли.
Перекладено з: 🔧 How I Used injectintofile and YAML to Automate File Changes in Rails