如何在Rake中获取当前命名空间?

时间:2011-12-06 12:26:51

标签: ruby rake

namespace :baseline do
  INDEX_DIR = index(:baseline) # context
  task(:foo) ...
end

如何在此上下文中获取:baseline符号?

3 个答案:

答案 0 :(得分:8)

namespace :baseline do |namespace|
  scope = namespace.instance_variable_get("@scope")

  INDEX_DIR = index(scope)

  task(:foo) ...
end

答案 1 :(得分:4)

现在有一种更清洁的方式:

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

我需要这个来定义动态任务,所以不必将命名空间传递给块是一个很大的优点。

答案 2 :(得分:1)

Dmitris answerRake.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