Ruby OptionParser empty switch “-” behavior

早过忘川 提交于 2019-11-30 21:08:10

问题


EDITED:

I've wrote code that uses OptionParser to handle command line input gracefully. I am facing two major hits.

  1. Passing an empty switches '-' doesn't give an error. Of course some programs take that as valid, but mine shouldn't.
  2. The program requires two mandatory switches, but it accepts one switch without complaining! e.g. program.ruby -f foo -b bar is the valid input and both switches are :REQUIRED. But providing only one switch passes without problem and this is not the desired behavior.

For the first case I've done this:

opts.on('-', /\A-\Z/) do
  $stderr.print "Invalid empty switch"
  exit 1
end

It works fine. But is this the proper way of doing it?

For the second case, I've looked around for a solution within the OptionParser.new block but I couldn't find one. e.g.

unless options.foo && options.bar
  puts "Error."
  exit 2
end

Doing it outside the OptionParser.new block is the normal way?


回答1:


If you are using OptionParser, then yes, you need to explicitly disallow the empty switch and manually check the required parameters.

However, if you used another tool for option parsing, such as defunkt's gem choice, you could mark options as required and the invalid options (such as the empty switch) would cause the help to be printed and application to exit. I understand that in some cases it makes more sense to use OptionParser, but personally I prefer to use the more convenient tools out there.

Even though making options required is pretty easy one way or the other, I would recommend that you think your API decision through. How many command line utilities do you know, that have required options? There's a reason why command line is usually separated into options and arguments, with the former being usually optional and the latter usually required. I would stick to that established convention.




回答2:


I think Thor(https://github.com/wycats/thor) can resolve your problem more efficiently.



来源:https://stackoverflow.com/questions/10037585/ruby-optionparser-empty-switch-behavior

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!