我想知道 - 是否有可能为rake任务创建私有帮助程序,无论我如何尝试这样做,它们最终都可以在全局范围内使用,并且可以作为任何对象的方法使用。例如:
## this is what I need
module MyRakeHelpers
def helper_1
end
def helper_2
end
end
include RakeHelpers
task :sometask do
helper_1
helper_2
end
## And this should not work:
# global scope
helper_1
"a random object".helper_1
class RandomClass
def foo
helper_1
end
end
答案 0 :(得分:5)
这对我有用:
AF_VSOCK
简而言之,您可以通过包含(或扩展)module MyRakeHelpers
def helper
puts 'foo'
end
end
module MyRakeTasks
extend Rake::DSL
extend MyRakeHelpers
task :some_task do
helper
end
end
来使用不同范围的Rake DSL。来自source:
DSL是一个提供#task,#desc,#namespace等的模块。当你想在顶级范围之外使用rake时使用它。对于从命令行运行的Rakefile,将自动包含此模块。
Rake::DSL
使用了task
,您也可以使用它来编写自己的DSL。
感谢How To Build Custom Rake Tasks; The Right Way提供关于Rake::Task#define_task
的提示。
答案 1 :(得分:1)
我认为你可以像这样编写你的佣金任务:
module MyRakeHelpers
def helper_1
end
def helper_2
end
end
task :sometask do
include RakeHelpers
helper_1
helper_2
end
答案 2 :(得分:1)
First anwser: 这是你在找什么?
module MyRakeHelpers
def self.helper_1
puts 'helper_1'
end
def self.helper_2
puts 'helper_2'
end
end
task :sometask do
MyRakeHelpers.helper_1
MyRakeHelpers.helper_2
end
第二个回答: 我唯一能想到的就是这样的事情
module MyRakeHelpers
def helper_1
puts 'helper_1'
end
def helper_2
puts 'helper_2'
end
end
task :sometask do |t|
t.extend MyRakeHelpers
t.helper_1
end
但是你必须在任何地方加上