2010-11-11 18 views
5

Bir thor görevini çalıştırdığımda önce belirli bir görevi çağırmak mümkün mü?Ruby - Thor belirli bir Görev yürütme

benim Thorfile:

class Db < Thor 

    desc "show_Version", "some description ..." 
    def show_version # <= needs a database connection 
    puts ActiveRecord::Migrator.current_version 
    end 

    private 

    def connect_to_database # <= call this always when a task from this file is executed 
    # connect here to database 
    end 

end 

Her görevde "connect_to_database" yöntemini yazabilirsiniz ama çok KURU görünmemektedir.

cevap

10

diğer görevleri çalıştırmak için invoke kullanabilirsiniz: aksi takdirde sadece yöntem her zamanki gibi çağırabilir,

def show_version 
    invoke :connect_to_database 
    # ... 
end 

da sadece bir kez çalıştırılır emin olacaktır, örneğin

def show_version 
    connect_to_database 
    # ... 
end 

Yoksa yapıcı çağrısını ekleyebilir, her çağırma ilk olarak devam etmesi için:

super çağrısı Thor hiçbir fikri ne olacak o olmadan çok önemlidir

def initialize(*args) 
    super 
    connecto_to_database 
end 
yap.

+0

Aramayı sadece bir kez "connect_to_database" adresine yazmak istiyorum. – ipsum

+1

yapıcıda normal bir sınıfta yazacağınız gibi bir kurucu eklemeyi deneyin: 'def initialize (* args); Süper; connecto_to_database; son ' – Theo

+0

Teşekkürler Theo harika çalışıyor :) – ipsum

1

Daha az belgelenmiş bir thor özelliği, default_task yöntemidir. Thor betiğinizin içinden bir sembol geçtikten sonra, bunu belirli bir görevi çalıştırmak için ayarlayabilirsiniz ve invoke kullanarak diğer okileri çalıştırın.

yani:

default_task: connect_to_database;

İlgili konular