Мне нравится ответ Хайме.Но когда я начал использовать его, я понял, что мне нужно внести некоторые изменения.Вот пример кода, который я использую:
private
def destination_path(path)
File.join(destination_root, path)
end
def sub_file(relative_file, search_text, replace_text)
path = destination_path(relative_file)
file_content = File.read(path)
unless file_content.include? replace_text
content = file_content.sub(/(#{Regexp.escape(search_text)})/mi, replace_text)
File.open(path, 'wb') { |file| file.write(content) }
end
end
Во-первых, gsub
заменит ВСЕ экземпляры текста поиска;Мне нужен только один.Поэтому вместо того, чтобы использовать sub
.
Далее, мне нужно было проверить, была ли строка замены уже на месте.В противном случае, я бы повторил вставку, если бы мой генератор рельсов запускался несколько раз.Поэтому я завернул код в блок unless
.
Наконец, я добавил для вас def destination_path()
.
Теперь, как бы вы использовали это в генераторе рельсов?Вот пример того, как я должен убедиться, что simplecov установлен для rspec и cucumber:
def configure_simplecov
code = "#Simple Coverage\nrequire 'simplecov'\nSimpleCov.start"
sub_file 'spec/spec_helper.rb', search = "ENV[\"RAILS_ENV\"] ||= 'test'", "#{search}\n\n#{code}\n"
sub_file 'features/support/env.rb', search = "require 'cucumber/rails'", "#{search}\n\n#{code}\n"
end
Вероятно, есть более элегантный и СУХОЙ способ сделать это.Мне очень понравилось, как вы можете добавить блок текста на примере Джейми.Надеюсь, мой пример добавляет немного больше функциональности и проверку ошибок.