2011-10-05 18 views
20

में कार्य नाम का उपनाम जब मुझे कुछ कार्य का नाम उपनाम करने की आवश्यकता होती है, तो मुझे यह कैसे करना चाहिए? कुछरेक

def alias_task(tasks) 
    tasks.each do |new_name, old_name| 
     task new_name, [*Rake.application[old_name].arg_names] => [old_name] 
    end 
end 

alias_task [ 
    [:ds, :db_schema], 
    [:dc, :db_create], 
    [:dr, :db_remove] 
] 

उत्तर

36

आपको उपनाम की आवश्यकता क्यों है? आप बिना किसी कोड के एक नया कार्य पेश कर सकते हैं, लेकिन मूल कार्य के लिए एक पूर्व शर्त के साथ।

namespace :db do 
    task :table do 
    puts "table" 
    end 
    #kind of alias 
    task :t => :table 
end 

इस पैरामीटर के साथ संयुक्त किया जा सकता है:

require 'rake' 
desc 'My original task' 
task :original_task, [:par1, :par2] do |t, args| 
    puts "#{t}: #{args.inspect}" 
end 

#Alias task. 
#Parameters are send to prerequisites, if the keys are identic. 
task :alias_task, [:par1, :par2] => :original_task 

पैरामीटर नाम के लिए खोज करने के लिए आप arg_names साथ मापदंडों पढ़ सकते हैं से बचने के लिए:

#You can get the parameters of the original 
task :alias_task2, *Rake.application[:original_task].arg_names, :needs => :original_task 

एक define_alias_task करने के लिए इसे कम्बाइन - विधि:

def define_alias_task(alias_task, original) 
    desc "Alias #{original}" 
    task alias_task, *Rake.application[original].arg_names, :needs => original 
end 
define_alias_task(:alias_task3, :original_task) 

रूबी 1.9.1 और रेक-0.8.7 के साथ परीक्षण किया गया।

हमम, ठीक है, मुझे लगता है कि कुछ घंटे पहले ठीक उसी तरह solution RyanTM already posted है।

+0

मुझे यह विधि पता है, लेकिन यह पैरामीटर पास नहीं कर सकता है। – coolesting

+0

मुझे पूरा यकीन है कि यह कर सकता है। कुछ मिनट रुको, मैं एक उदाहरण तैयार करूंगा। – knut

+1

मैंने अपना उदाहरण जोड़ा - और पाया कि यह पहले ही पोस्ट किया गया उत्तर है। लेकिन शायद मेरी व्याख्या समझने में मदद करती है (ईमानदार होने के लिए, मैंने तब तक जवाब नहीं दिया जब तक कि मैंने वही जवाब नहीं दिया;) – knut

4

यहाँ है:

उदाहरण के लिए, मैं कैसे काम नाम बारी है:

rake db:table 
rake db:create 
rake db:schema 
rake db:migration 

रहे हैं:

rake db:t 
rake db:c 
rake db:s 
rake db:m 

संपादन जवाब मिलने के बाद ही कोड किसी ने ऐसा करने के लिए लिखा: https://gist.github.com/232966

def alias_task(name, old_name) 
    t = Rake::Task[old_name] 
    desc t.full_comment if t.full_comment 
    task name, *t.arg_names do |_, args| 
    # values_at is broken on Rake::TaskArguments 
    args = t.arg_names.map { |a| args[a] } 
    t.invoke(args) 
    end 
end 
संबंधित मुद्दे