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 ")' i.e задача в основном пространстве имен. – BoraMa

ответ

1

Вы можете создать задачу в мор динамично, как это:

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 
Смежные вопросы