2014-04-02 3 views
10

में एक रूपांतरण विकल्प जोड़ना मैं अपने रूबी Thor कमांड लाइन इंटरफ़ेस एप्लिकेशन में --version विकल्प कैसे जोड़ूं।रूबी थोर सीएलआई

उदाहरण के लिए मैं Run a CLI Thor app without arguments or task name को चलाने के लिए

$ thor_app --version 
> thor_app version 1.0.0 

इस सवाल से संबंधित है सक्षम होना चाहते हैं, लेकिन विशेष रूप से एक --version विकल्प है जो एक काम की आवश्यकता नहीं है जोड़ने के लिए।

नोट
यह self-answer format निम्नलिखित लिखा गया था। अतिरिक्त उत्तरों और अपडेट को प्रोत्साहित किया जाता है

उत्तर

23

मैं इस दृष्टिकोण के साथ कुछ भाग्य था। desc सामग्री __print_version को उजागर किए बिना इसे -v, --version के रूप में प्रदर्शित करने की अनुमति देगी।

+0

यह बंडलर की तरह है। केवल वे केवल कार्य संस्करण को कॉल करते हैं और लोगों को इसे 'बंडलर संस्करण' के साथ भी कॉल करने देते हैं (क्योंकि क्यों नहीं?) https://github.com/bundler/bundler/blob/6afa89217cf052c58316da1f2be7bf54749ff9de/lib/bundler/cli.rb#L312- एल 316 – ZombieDev

+2

इसे दस्तावेज फिक्स के लिए थोर देवों को वापस सबमिट किया जाना चाहिए। –

1

अब तक का सबसे अच्छा विकल्प है जो एक बूलियन क्लास विकल्प बनाने के लिए है, जो किसी कार्य से संबंधित नहीं है, जिसे अन्य कार्यों द्वारा संदर्भित किया जा सकता है। कक्षा विकल्प के लिए अक्सर इस्तेमाल किया जाने वाला उदाहरण -v वर्बोज़ है, क्योंकि सभी कार्य यह निर्धारित करने के लिए इसका उपयोग कर सकते हैं कि वे कितना शोर होना चाहिए।

फिर 'संस्करण' कार्य बनाएं और इसे डिफ़ॉल्ट कार्य करें, इसलिए जब कोई कार्य परिभाषित नहीं किया जाता है तो संस्करण कार्य चलाया जाता है और --version ध्वज (कक्षा विकल्प) पर प्रतिक्रिया कर सकता है।

class CLI < Thor 
    #include Thor::Actions 
    class_option :version, :type => :boolean 

    desc "version", "Show thor_app version" 
    def version 
    if options[:version] 
     puts "thor_app version #{find_version}" 
    end 
    end 
    default_task :version 

    no_tasks do 
    def find_version 
     ## Method can be replaced to look up VERSION 
     '1.0.0' 
    end 
    end 
end 
0

मुझे स्वीकार्य समाधान पसंद नहीं आया; यह version को कमांड के रूप में सूचीबद्ध करता है, --version और --no-version को वैश्विक विकल्पों के रूप में सूचीबद्ध करता है, और यदि स्क्रिप्ट किसी विकल्प के साथ चलती है तो यह मदद देने के बजाय चुप है।

सबसे अच्छा मैं के साथ थोर के बाहर यह करने के लिए है आने के लिए कर लिया है

:

class CLI < Thor 
    . 
    . 
    . 
end 

if ARGV[0] == "--version" 
    puts "MyApp #{MyApp::VERSION}" 
    exit 
end 

CLI.start 

यह मामूली दोष यह है कि --version कहीं भी दर्ज नहीं किया जाता है।

class CLI < Thor 
    map %w[--version -v] => :__print_version 

    desc "--version, -v", "print the version" 
    def __print_version 
    puts FooBar::VERSION 
    end 
end 

प्रमुख अंडरस्कोर सुनिश्चित करता है वहाँ yourapp version की तरह एक आदेश नहीं है, और बलों yourapp --version या yourapp -v:

+1

"मुझे स्वीकार्य समाधान पसंद नहीं आया" - केवल वंशावली के लिए, मूल रूप से मॉर्गन के उत्तर (http://stackoverflow.com/a/22809973/528044) को संदर्भित किया गया। –

संबंधित मुद्दे