2011-09-01 16 views
10

थोर विकि पृष्ठ, Making an Exectable, आप एक थोर संचालित CLI आदेश है कि कुछ इस तरह दिखता बनाने का तरीका पता चलता पहले तर्क के रूप में fooथोर निष्पादन पर ध्यान न दें टास्क नाम

मैं भी थोर के default_method उपयोग कर किसी भी तर्क के बिना एक थोर निष्पादन चला सकते हैं:

:

bash ./mythorcommand

हालांकि, मैं पहले तर्क के रूप में एक चर स्ट्रिंग में पारित करने के लिए करना चाहते हैं bash ./mythorcommand "somevalue"

यह काम नहीं करता है क्योंकि थोर कमांड पहले तर्क को कार्य नाम होने की उम्मीद करते हैं। क्या कार्य नाम को अनदेखा करने और डिफ़ॉल्ट विधि को पहला तर्क भेजने का कोई तरीका है?

तो इस कार्यक्षमता मौजूद नहीं है, मुझे लगता है कि यह एक तरीका है कि एक कार्य/विधि में सभी कमांडलाइन तर्कों से होकर गुजरेगा जोड़ने के लिए बहुत उपयोगी हो जाएगा:

class MyThorCommand < Thor 
    only_method :default 

    def default(*args) 
    puts args.inpsect 
    end 
end 

MyThorCommand.start 

उत्तर

1

हालांकि इस वास्तव में आपकी समस्या का समाधान नहीं करता है , एक विकल्प केवल एक विकल्प झंडा देकर एक आदेश को लागू करने की Thor.map का उपयोग कर हो सकता है:

map '-F' => 'foo' 

अब आप भी मानकों

पारित कर सकते हैं
4

आप थोर :: समूह से विस्तार करना चाहिए और उस कॉल प्रारंभ विधि

class Test < Thor::Group 
    desc "Act description" 
    def act 
    puts "do smth" 
    end 
end 

Test.start 
+0

यह उत्तर सही है। '# Act' के अंदर 'bar' को कॉल करके उपलब्ध अज्ञात स्ट्रिंग तर्क की सामग्री बनाने के लिए' तर्क: बार 'का उपयोग करें। थोर को यह तर्क मिलेगा कि यह 'class_options' द्वारा परिभाषित किसी भी विकल्प से पहले या बाद में है या नहीं। –

+3

सावधान रहें कि थोर :: समूह सभी कार्यों को एक साथ कॉल करता है। – FuePi

2

मैं इस समस्या यह है कि मेरे साथ बहुत अच्छी तरह से काम कर रहा है के लिए एक नहीं बल्कि 'अजीब' समाधान नहीं मिला।

आप थोर में एक डिफ़ॉल्ट कार्य जोड़ते हैं। आप method_missing जोड़ते हैं ताकि आप अपने आवेदन के पैरामीटर होने पर डिफ़ॉल्ट विधि को तर्क के रूप में पास करने में थोर को ट्रिक कर सकें।

अपने उदाहरण से लेते हुए समाधान इस प्रकार दिखाई देगा:

class MyThorCommand < Thor 
    default_task :my_default 

    desc "my_default", "A simple default" 
    def my_default(*args) 
    puts args.inspect 
    end 

    def method_missing(method, *args) 
    args = ["my_default", method.to_s] + args 
    MyThorCommand.start(args) 
    end 

end 

MyThorCommand.start(ARGV) 

इस फाइल "my_thor.rb" में है, तो एक निष्पादन "माणिक my_thor.rb foo बार" प्रदर्शित होगा '[ "foo परिणामस्वरूप, "," बार "]।

उम्मीद है कि यह मदद करता है।