Rake Task Misfire - PullRequest
       11

Rake Task Misfire

0 голосов
/ 15 марта 2012

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

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

1 Ответ

3 голосов
/ 15 марта 2012

Проблема в том, что вы эффективно передаете "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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...