2012-03-15 10 views
0

特定のテキストファイルに対して検索と置換操作を実行するレーキファイルがあります。私はターミナルでこれを入力すると:Rake Task Misfire

rake rename:changename[Funk] 

私はFunkに用語Frameworkのすべてのインスタンスを変更するためにすくいファイルをしたいと思います。問題は、コードが現在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

問題は、あなたが効果的にgsubに毎回"new_name"を渡しているということです。これは、: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

恐ろしい!今は完璧に動作します。ありがとう! –