Как мне получить текущее пространство имен в Rake? - PullRequest
8 голосов
/ 06 декабря 2011
namespace :baseline do
  INDEX_DIR = index(:baseline) # context
  task(:foo) ...
end

Как мне получить символ :baseline в этом контексте?

Ответы [ 3 ]

8 голосов
/ 06 декабря 2011
namespace :baseline do |namespace|
  scope = namespace.instance_variable_get("@scope")

  INDEX_DIR = index(scope)

  task(:foo) ...
end
4 голосов
/ 14 октября 2015

Теперь есть более чистый путь:

namespace :baseline do
  scope = Rake.application.current_scope
  puts scope.path
end 

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

1 голос
/ 15 октября 2015

В дополнение к ответ Дмитриса с Rake.application.current_scope:

namespace :baseline do |namespace|
  scope = namespace.scope.path
  #...
end

scope будет "baseline" (строка, а не запрошенный символ).

Но в rake вы можете определить пространство имен с помощью символа или строки, вы также можете определить это так:

namespace 'baseline' do |namespace|
  scope = namespace.scope.path
  #...
end 

Область действия будет одинаковой с обоими определениями.

Если вам действительно нужноСимвол, вы можете использовать scope.to_sym.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...