2012-03-15 2 views
0

У меня есть файл рейка, который выполняет операцию поиска и замены определенных текстовых файлов. Когда я печатаю это в терминале:Ошибка пропущенных задач

rake rename:changename[Funk] 

Я хотел бы файл граблей, чтобы изменить каждый экземпляр термина 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 

ответ

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] 
+1

Удивительный! Прекрасно работает. Благодаря! –

Смежные вопросы