У меня есть много полезных функций в моих файлах рейка, некоторые из которых создают задачи рейка. Я хочу переместить эти служебные функции в модуль, чтобы избежать конфликтов имен, но когда я делаю, методы грабли больше недоступны.Как я могу вызвать методы рейка из модуля
require 'rake'
directory 'exampledir1'
module RakeUtilityFunctions
module_function
def createdirtask dirname
directory dirname
end
end
['test1', 'test2', 'test3'].each { |dirname|
RakeUtilityFunctions::createdirtask dirname
}
Ошибки я получаю:
$ rake
rake aborted!
undefined method `directory' for RakeUtilityFunctions:Module
C:/dev/rakefile.rb:8:in `createdirtask'
C:/dev/rakefile.rb:13:in `block in <top (required)>'
C:/dev/rakefile.rb:12:in `each'
C:/dev/rakefile.rb:12:in `<top (required)>'
Насколько я могу сказать, метод каталога помещается на рубинового верхнего уровня по following code в Rake:
# Extend the main object with the DSL commands. This allows top-level
# calls to task, etc. to work from a Rakefile without polluting the
# object inheritance tree.
self.extend Rake::DSL
Есть ли простой способ вызова функций, которые были размещены на верхнем уровне?
Спасибо за ответ @ReggieB. С вашей помощью я нашел еще один вопрос о подобной проблеме, см. Мой ответ. – Eoghan