🔧 Як я використав inject_into_file та YAML для автоматизації змін у файлах Rails

Чи траплялося вам робити одні й ті ж нудні правки в кількох 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: " before
    action :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