Rakeの名前空間のエイリアスは可能ですか?Rake名前空間エイリアス
私はあなたが仕事を別名することができますどのように好き:
task :commit => :c
はこのような何かを行うことができるのが大好きだ:
task :commit => :c
で
namespace :git => :g
Rakeの名前空間のエイリアスは可能ですか?Rake名前空間エイリアス
私はあなたが仕事を別名することができますどのように好き:
task :commit => :c
はこのような何かを行うことができるのが大好きだ:
task :commit => :c
で
namespace :git => :g
あなたはドンエイリアスを定義しない場合は、前提条件を設定します。 :commit
に電話すると、前もって:c
が呼び出されます。 プリキュアサイトが1つしかなく、:commit
に独自のコードが含まれていない場合は、エイリアスのように見えますが、そうではありません。あなたdefine a default task for your namespace及び(および前提条件が再び別の名前空間のデフォルトの作業になる場合があります)、このタスクのための前提条件を設定した場合、あなたは「別名」あなたの名前空間かもしれない、ということを知っ
。
でも、ネームスペースのエイリアシングは必要ありません。ネームスペースのデフォルトタスクを定義し、おそらく 'エイリアス'というタスクを定義するだけで十分です。もう一度質問を読んだ後、私はIs there a “method_missing” for rake tasks?に基づいて、代替のアイデアを持って
:
require 'rake'
namespace :long_namespace do
task :a do |tsk|
puts "inside #{tsk.name}"
end
end
rule "" do |tsk|
aliastask = tsk.name.sub(/short:/, 'long_namespace:')
Rake.application[aliastask].invoke
end
Rake.application['short:a'].invoke
ルールがtask_missing -ruleを定義し、名前空間を交換しようとする(例では、それは置き換えられます'short'と 'long_namespace')。
短所:未定義のタスクはエラーを返しません。エイリアスの名前空間を定義するための新しい方法aliasnamespace
と
require 'rake'
namespace :long_namespace do
task :a do |tsk|
puts "inside #{tsk.name}"
end
end
rule "" do |tsk|
aliastask = tsk.name.sub(/short:/, 'long_namespace:')
if Rake.application.tasks.map{|tsk| tsk.name }.include?(aliastask)
Rake.application[aliastask].invoke
else
raise RuntimeError, "Don't know how to build task '#{tsk.name}'"
end
end
Rake.application['short:a'].invoke
Rake.application['short:undefined'].invoke
そして、もっと一般的なバージョン:だから、適応バージョンが必要
require 'rake'
#Extend rake by aliases for namespaces
module Rake
ALIASNAMESPACES = {}
end
def aliasnamespace(alias_ns, original_ns)
Rake::ALIASNAMESPACES[alias_ns] = original_ns
end
rule "" do |tsk|
undefined = true
Rake::ALIASNAMESPACES.each{|aliasname, origin|
aliastask = tsk.name.sub(/#{aliasname}:/, "#{origin}:")
if Rake.application.tasks.map{|tsk| tsk.name }.include?(aliastask)
Rake.application[aliastask].invoke
undefined = false
end
}
raise RuntimeError, "Don't know how to build task '#{tsk.name}'" if undefined
end
#And now the usage:
namespace :long_namespace do
task :a do |tsk|
puts "inside #{tsk.name}"
end
end
aliasnamespace :short, 'long_namespace'
Rake.application['short:a'].invoke
#~ Rake.application['short:undefined'].invoke
あなたは間違いなく、クヌートの答えを受け入れる必要があります。 – Jerska