2016-03-22 3 views
0

私は、APIを消費するためのタスクを含むレーキファイルを作成しようとしています。私は、使用されるコールに応じて、タスクに多くの引数を渡すことができたいと思っています。タスクを使いやすくするために、ネームスペースを設定の一部にしたいと考えています。これは可能ですか?rake名前空間を設定として使用しますか?

namespace :myAPI do 

    SERVER = 'local' 
    namespace :live do 
     SERVER = 'live' 
    end 
    namespace :beta do 
     SERVER = 'beta' 
    end 

    BASE_URI = { 
     live: "https://myapi.com/do/v1", 
     beta: "https://beta.myapi.com/do/v1", 
     local: "http://127.0.0.1:4500/do/v1" 
    } 

    desc 'Get currently logged users' 
    task :extract_logged_users => :environment do 
     get("BASE_URI[SERVER]/users/current") 
    end 

} 

そして私はできるようにし、例えば、ライブサーバーに対してこれを実行したい:

rake myAPI:live:extract_logged_users 
+0

さて、このように書かれている場合、タスク 'extract_logged_users' 'myAPI'名前空間でのみ定義されています。さらに、この方法で 'SERVER'定数を複数回再定義します(そしてレーキは警告を出します)。 – BoraMa

+0

メインの 'myAPI'ネームスペースでタスクを定義し、すべてのサブネームスペースで同じタスクを動的に定義することができます。これらの動的タスクは必要な変数のみを設定し、 'invoke(" myAPI:the_task ")、すなわちメイン名前空間のタスクを呼び出します。 – BoraMa

答えて

1

あなたはこのようなMOR動的な方法でタスクを作成することができます

require 'rake' 
BASE_URI = { 
    live: "https://myapi.com/do/v1", 
    beta: "https://beta.myapi.com/do/v1", 
    local: "http://127.0.0.1:4500/do/v1" 
}.each do |server,url| 
    namespace :myAPI do 
    namespace server do |ns| 
     desc 'Get currently logged users' 
     task :extract_logged_users do 
      puts 'get("%s/users/current", %s)' % [server,url] 
     end 
    end 
    end 
end 

(私はあなたのgetコマンドをputsに置き換えて何が起こったのかを確認し、urlをコマンドに追加しました)。今

あなたが呼び出すことができます。

rake myAPI:live:extract_logged_users 
rake myAPI:beta:extract_logged_users 
rake myAPI:local:extract_logged_users 

出力:

get("live/users/current", https://myapi.com/do/v1) 
get("beta/users/current", https://beta.myapi.com/do/v1) 
get("local/users/current", http://127.0.0.1:4500/do/v1) 

代替コーディング:

namespace :myAPI do 

    BASE_URI = { 
     live: "https://myapi.com/do/v1", 
     beta: "https://beta.myapi.com/do/v1", 
     local: "http://127.0.0.1:4500/do/v1" 
    } 

    BASE_URI .keys.each do |key| 
     namespace key do |ns| 
     desc 'Get currently logged users' 
     task :extract_logged_users do 
      puts 'get("%s")' % BASE_URI[key] 
     end 
     end 
    end 
end