2011-12-06 11 views

Respuesta

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

    INDEX_DIR = index(scope) 

    task(:foo) ... 
end 
+3

Puede usar esto para obtener acceso al 'scope', que será una matriz de los espacios de nombres en los que está anidada esta tarea:' namespace.instance_variable_get ("@ scope") ' –

+0

Cool, agregado a la respuesta – Nerian

+2

Ahh, buenos viejos feos hacks ;-) – Reactormonk

4

Hay una forma mucho más clara ahora:

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

Necesitaba esto para definir tareas dinámicas, así que no tener que pasar el espacio de nombres para el bloque es una gran ventaja.

1

Además de Dmitris answer con Rake.application.current_scope:

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

scope será "baseline" (String, no el símbolo solicitado).

Pero en rake se puede definir el espacio de nombres con el símbolo o cadena, también se puede definir así:

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

El alcance será el mismo con ambas definiciones.

Si realmente necesita el símbolo, puede usar scope.to_sym.

Cuestiones relacionadas