2013-05-23 9 views
11

काम करता है नीचे कोड की आवश्यकता होती है, लेकिन मैं मैन्युअल fetch का उपयोग कर, जब मैं आवश्यक पैरामीटर के लिए देशी OptionParser sytax में आवश्यक तर्क का निर्माण करना चाहते आवश्यक तर्क के लिए तर्क त्रुटियों को ऊपर उठाने रहा हूँ:कैसे उत्पन्न करने के लिए OptionParser तर्क

# ocra script.rb -- --type=value 
options = {} 
OptionParser.new do |opts| 
    opts.banner = "Usage: example.rb [options]" 

    opts.on("--type [TYPE]",String, [:gl, :time], "Select Exception file type (gl, time)") do |t| 
    options["type"] = t 
    end 

    opts.on("--company [TYPE]",String, [:jaxon, :doric], "Select Company (jaxon, doric)") do |t| 
    options["company"] = t 
    end 

end.parse! 

opts = {} 
opts['type'] = options.fetch('type') do 
    raise ArgumentError,"no 'type' option specified as a parameter (gl or time)" 
end 

opts['company'] = options.fetch('company') do 
    raise ArgumentError,"no 'company' option specified as a parameter (doric or jaxon)" 
end 

उत्तर

8

वहाँ एक जवाब है कि आप मदद कर सकते हैं के साथ एक समान सवाल है: "How do you specify a required switch (not argument) with Ruby OptionParser?"

संक्षेप में: वहाँ (वे सब के बाद विकल्प कहा जाता है) के लिए आवश्यक एक विकल्प बनाने के लिए एक तरीका हो प्रतीत नहीं होता है।

OptionParser::MissingArgument अपवाद है कि आप वर्तमान में ArgumentError के बजाय उठा सकते हैं जो आप वर्तमान में फेंक रहे हैं।

+0

मैं https://github.com/JEG2/highline नामक एक रूबी मणि का उपयोग करने के लिए बस गया है जिसमें इसका क्ली मेनू डीएसएल और आवश्यक पैराम है। – lukemh

+1

अच्छा काम। मेरे एक सहयोगी ने एस्कॉर्ट नामक एक मणि भी लिखा जो सीएलआई ऐप्स के लिए आवश्यक पैरामीटर सेट कर सकता है: https://github.com/skorks/escort#required-arguments –

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