作者:小白蒋,个人博客:www.nihao070.cn
ruby中thor详细用法
- ruby中Thor是什么?
- 第一点:公共方法变成命令
- 第二点:你也可以使用Ruby的可选参数使CLI参数可选
- 第三点:long_desc、\x5
- 第四点:thor可以更容易指定选项和标签作为元数据
- 第五点:默认情况下,选项是字符串,但是你可以为任何选项指定另一种类型:
- 第六点:您还可以指定一个特定的选项是必需的。
- 第七点:如果只想指定选项的类型,可以使用简写方式一次性指定多个选项。你可以重写前面的例子为:
- 第八点:您可以使用class_option为整个类指定一个应该存在的选项。类选项采用与单个命令选项完全相同的参数,但应用于一个类的所有命令。
- 第九点:当您的CLI变得更加复杂时,您可能希望能够指定指向自己的一组子命令的命令。其中一个示例是git remote命令,它公开添加、重命名、rm、修剪、设置头等等。
ruby中Thor是什么?
答:Thor是构建强大命令行接口的工具箱。Bundler, Vagrant, Rails以及其他的一些项目使用了Thor构建其命令行工具。bundler用来处理Ruby项目的版本依赖,Vagrant用来管理虚拟机运行环境,Rails是web开发框架。
Thor is a toolkit for building powerful command-line interfaces. It is used in Bundler, Vagrant, Rails and others.
第一点:公共方法变成命令
一个简单的Thor类公开带有许多子命令的可执行文件,比如git或bundler。在Thor类中,公共方法变成命令。
新建一个MyCLI.rb文件
1 require "thor"
2
3 class MyCLI < Thor
4 desc "hello NAME", "say hello to NAME"
5 def hello(name)
6 puts "hi #{
name}"
7 end
8 end
9
10 MyCLI.start(ARGV)
~
在这里,你想执行,上面定义的hello方法就得在命令中输入,然后hello 命令后面在跟参数name
ruby MyCLI hello mary
输出:
hi Mary
第二点:你也可以使用Ruby的可选参数使CLI参数可选
1 require "thor"
2
3 class MyCLI < Thor
4 desc "hello NAME", "say hello to NAME"
5 def hello(name, from=nil)
6 puts "from: #{
from}" if from
7 puts "hello #{
name}"
8 end
9 end
10
11 MyCLI.start(ARGV)
执行ruby MyCLI.rb hello mary bos
, from参数如果不传递就是nil(空),如果传递就打印出from:bos
from: bos
hello mary
第三点:long_desc、\x5
①在许多情况下,您需要在较长的使用说明中提供较长的描述。在这种情况下,可以使用long_desc指定更长的使用指令。
②默认情况下,较长的描述以终端的大小包装行,并使用一个换行符将行分组在一起,就像Markdown一样。还可以在行首使用\x5转义序列强制行之间进行一次硬换行。**
1 require "thor"
2
3 class MyCLI < Thor
4 desc "hello NAME", "say hello to NAME"
5 long_desc <<-LONGDESC
6 `cli hello` will print out a message to a person of your
7 choosing.
8
9 You can optionally specify a second parameter, which will print
10 out a from message as well.
11
12 > $ cli hello "Yehuda Katz" "Carl Lerche"
13
14 \x5> from: Carl Lerche
15 LONGDESC
16 def hello(name, from=nil)
17 puts "from: #{
from}" if from
18 puts "Hello #{
name}"
19 end
20 end
21
22 MyCLI.start(ARGV)
执行跟上面命令一样
第四点:thor可以更容易指定选项和标签作为元数据
Thor makes it easy to specify options and flags as metadata about a Thor command:
1 require "thor"