如何在我的Ruby Thor命令行界面应用程序中添加--version
选项。
例如,我希望能够运行
$ thor_app --version
> thor_app version 1.0.0
此问题与Run a CLI Thor app without arguments or task name有关,但专门用于添加不需要任务的--version
选项。
注意
这是在self-answer format之后写的。鼓励添加答案和更新
答案 0 :(得分:28)
我对这种方法感到非常幸运:
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
。 desc
内容允许其显示为-v, --version
而不会泄露__print_version
。
答案 1 :(得分: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
答案 2 :(得分:1)
我不喜欢公认的解决方案;它最终列出version
作为命令,列出--version
和--no-version
作为全局选项,如果脚本没有选项运行,则它是静默的而不是提供帮助。
我能想到的最好的就是在雷神之外做到这一点:
class CLI < Thor
.
.
.
end
if ARGV[0] == "--version"
puts "MyApp #{MyApp::VERSION}"
exit
end
CLI.start
这有一个小缺点,即--version
没有记录在任何地方。