2015-10-21 2 views
0

Я пытаюсь написать задачу рейка, чтобы переименовать все вхождения метода в проект ruby. Я достиг этого, используя следующую команду из командной строки.Rake task для изменения всех событий метода в проекте

В основном

retention.group_by('bla').count 

должен быть изменен на

retention.group_by('bla').size 

мне удалось достичь этого uisng следующее из командной строки

find . -name \*.rb -exec ruby -i -p -e "gsub(/(group_by(\(([^\)]+)\))).count/, '\1.size')" \; 

Я сейчас пытаюсь это сделать от рейк-задачи, чтобы сделать ее прямой для изменения во всех наших проектах. Какой самый простой/самый элегантный способ сделать это? Думаю, что я близок, просто выберите все файлы в каталоге проекта, на котором я застрял.

+1

Почему бы не сделать находку все с IDE и с помощью Regex найти все места, где вы используете '.count' вместо' size'? – MrYoshiji

+0

Мне нужно, чтобы это было изменено в нескольких клиентах рельсов, поэтому мне нужно сделать это как можно более прямолинейно –

+0

Я бы использовал библиотеку файлов, чтобы открыть каждый файл и прочитать строки, чтобы найти этот шаблон. http://ruby-doc.org/core-2.2.0/File.html –

ответ

0

Это сделал трюк

namespace :rename do 

    task :gb_count_rename do 
    Dir.glob("**/*.rb").each do |file_name| 
     text = File.read(file_name) 
     content = text.gsub(/(group_by(\(([^\)]+)\))).count/, '\1.size') 
     File.open(file_name, "w") { |file| file << content } 
    end 
    end 

end