2010-11-11 13 views
5

क्या मैं पहले एक विशिष्ट कार्य को कॉल करना संभव करता हूं, जब मैं थोर कार्य चलाता हूं?रुबी - थोर पहले एक विशिष्ट कार्य निष्पादित करें

मेरी 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 

मैं हर काम में "connect_to_database" विधि लिख सकता है लेकिन है कि बहुत सूखी नहीं लगता है।

उत्तर

10

आप अन्य कार्यों को चलाने के लिए invoke उपयोग कर सकते हैं:

def show_version 
    invoke :connect_to_database 
    # ... 
end 

भी सुनिश्चित करें कि वे केवल एक बार चलाए जा रहे हैं कर देगा कि, अन्यथा आप सिर्फ विधि हमेशा की तरह कॉल कर सकते हैं, उदाहरण के लिए

def show_version 
    connect_to_database 
    # ... 
end 

या आप निर्माता के लिए कॉल जोड़ सकता है, यह हर मंगलाचरण में पहली चलाने के लिए:

def initialize(*args) 
    super 
    connecto_to_database 
end 

super करने के लिए कॉल बहुत महत्वपूर्ण है, इसके बिना थोर क्या करने के लिए पता नहीं है जाएगा कर।

+0

मैं केवल एक बार "connect_to_database" पर कॉल लिखना चाहता हूं। जैसे कि आप इसे रचनाकार – ipsum

+1

में नियमित कक्षा में लिखेंगे, एक कन्स्ट्रक्टर जोड़ने का प्रयास करें: 'def प्रारंभ करें (* args); सुपर; connecto_to_database; अंत ' – Theo

+0

धन्यवाद थियो महान काम करता है :) – ipsum

1

थोर की प्रलेखित विशेषता के तहत विधि डिफ़ॉल्ट_टास्क विधि है। अपनी थोर स्क्रिप्ट के भीतर से एक प्रतीक पारित किया है, आप इसे एक विशिष्ट कार्य चलाने के लिए सेट कर सकते हैं और, इनवॉक का उपयोग करके, अन्य चीजें चला सकते हैं।

अर्थात्:

default_task: connect_to_database;