Измените файл с генератором направляющих

Как Вы делаете генератор, который изменяет файл.

Я пытаюсь сделать его так, чтобы это нашло шаблон в файле и добавило, прибывают содержание в строку ниже его.

12
задан Arcath 18 January 2010 в 18:58
поделиться

1 ответ

Генератор строительных лесов Rails делает это, когда добавляет маршрут в config/routes.rb Он делает это, вызывая очень простой метод:

def gsub_file(relative_destination, regexp, *args, &block)
  path = destination_path(relative_destination)
  content = File.read(path).gsub(regexp, *args, &block)
  File.open(path, 'wb') { |file| file.write(content) }
end

Что он делает, так это принимает путь/файл в качестве первого аргумента, за которым следует обратный шаблон, аргументы gsub и блок. Это защищенный метод, который вам придется воссоздать для использования. Я не уверен, что destination_path - это что-то, к чему у вас будет доступ, так что вы, вероятно, захотите пройти по точному пути и пропустить любое преобразование.

Чтобы использовать gsub_file, допустим, вы хотите добавить теги к вашей пользовательской модели. Вот как это сделать:

line = "class User < ActiveRecord::Base"
gsub_file 'app/models/user.rb', /(#{Regexp.escape(line)})/mi do |match|
  "#{match}\n  has_many :tags\n"
end

Вы находите определенную строку в файле, открыватель класса, и добавляете свою строку has_many прямо под ней.

Остерегайтесь, потому что это самый хрупкий способ добавления содержимого, поэтому маршрутизация - одно из немногих мест, где оно используется. Пример выше обычно обрабатывается с помощью mix-in.

16
ответ дан 2 December 2019 в 19:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: