我有一个rake文件,可以对某些文本文件执行查找和替换操作。当我在终端输入时:
rake rename:changename[Funk]
我希望rake文件将术语Framework
的每个实例更改为Funk
。问题是代码目前正在将Framework
更改为new_name
。
关于我做错的任何想法?
namespace :rename do
desc 'changes the name of the app'
task :changename, :new_name do
file_names = ['config/environments/test.rb', 'config/environments/production.rb', 'config/environment.rb']
file_names.each do |file_name|
text = File.read(file_name)
File.open(file_name, "w") { |file| file << text.gsub("Framework", :new_name.to_s) }
end
end
end
答案 0 :(得分:3)
问题在于您每次都有效地将"new_name"
传递给gsub
。这是因为:new_name.to_s
只返回:new_name
符号的字符串表示形式。
您已允许用户将参数传递给您的任务:
task :change_name, :new_name
# ...
end
但是,您实际上并没有接收参数数组,该数组作为第二个形式参数提供给task
方法的块:
task :change_name, :new_name do |task, args|
args.with_defaults new_name: 'Funk'
# ...
end
掌握了参数,您需要做的就是检索新名称:
file << text.gsub 'Framework', args[:new_name]