12
A
回答
16
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
線正下方。
但要小心,因爲這是添加內容的最脆弱的方式,這就是爲什麼路由是使用它的唯一地方之一。上面的例子通常會被混合處理。
1
我喜歡Jaime的回答。但是,當我開始使用它時,我意識到我需要做一些修改。下面是我使用的示例代碼:
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的,黃瓜爲例:
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
有可能是一個更優雅和DRY-ER的方式來做到這一點。我真的很喜歡你如何添加一塊Jamie的例子。希望我的例子增加了一些功能和錯誤檢查。
相關問題
- 1. 修改生成文件
- 2. 「導軌生成插件」給出「找不到生成器插件」。
- 3. 使用導軌控制器生成器使用post方法生成路徑
- 4. 使用Illustrator/Indesign文件在導軌中生成PDF
- 5. 修改Microstrategy SQL生成器
- 6. Python修改生成器
- 7. 如何修補內置在模型生成器中的導軌?
- 8. 修改生成文件中的變量
- 9. 修改導軌新命令
- 10. 似乎無法禁用導軌生成器生成規格
- 11. 如何使用Compojure生成修改的http頭文件?
- 12. 使用JAXB從DTD文件生成Java類 - 如何修改DTD?
- 13. 導軌3 xml生成器排除零
- 14. 導軌部分不生成事件
- 15. json生成器中使用回形針的導軌
- 16. 角軌文件生成器,如軌道腳手架
- 17. 導軌改變生產
- 18. 修剪在生成文件
- 19. 當修改源文件時,無法使用add_custom_command重新生成文件
- 20. 修改單詞組合生成器
- 21. 如何在Python中修改生成器?
- 22. 如何修改生成器值
- 23. 生成文件的FTP服務器 - 編譯時頭文件修改
- 24. 使用導軌形式修改用戶模型
- 25. 導入生成的生成文件
- 26. 使用jenkins修改文件
- 27. Javascript RegExp使用全局修改器生成異常結果
- 28. 軌在lib文件夾中使用文件 - 導軌2.3.5
- 29. 在運行時修改導軌模型
- 30. 導軌遷移。修改auto_increment的起點