我希望自动执行以下操作:
根据我的理解,这方面的工具是Rake和Thor,但是,我应该使用哪一个?
在我看来,耙子更具事实性和受欢迎程度.我听过有人推荐Thor.
这些如何在破败中相互对立?
我正在寻找一种方法来创建一个命令行Thor应用程序,它将运行一个没有任何参数的默认方法.我摆弄了Thor的default_method选项,但仍然要求我传入一个参数.我发现了一个类似的情况,有人想要使用参数运行CLI Thor任务但没有任务名称.
我想运行一个没有任务名称和参数的任务.这样的事情可能吗?
我在让托尔这么做时遇到了一些麻烦,所以希望有人可以指出我做错了什么.
我有一个主类class MyApp < Thor
,我想分成多个名称空间的单独文件,比如thor create:app_type
和thor update:app_type
.我找不到任何一个例子来说明如何将Thor应用程序拆分成碎片,而我尝试过的东西似乎不起作用.
举个例子,这个班我试图从主要的Thor类中脱颖而出:
module Things
module Grouping
desc "something", "Do something cool in this group"
def something
....
end
end
end
Run Code Online (Sandbox Code Playgroud)
当我尝试在我的主要课程中包含或要求时:
class App < Thor
....
require 'grouping_file'
include Things::Grouping
....
end
Run Code Online (Sandbox Code Playgroud)
我得到一个例外: '<module:Grouping>': undefined method 'desc' for Things::Grouping:Module (NoMethodError)
是否有可能为Thor任务设置多个名称空间,如果是,那么如何将其分解出来以便您没有一个需要几百行的单一类?
Thor非常受欢迎,拥有比Boson更多的追随者和贡献者,但是Boson看起来比Thor更强大,而且建筑经过深思熟虑.
在Boson你:
我注意到所有这些好处只是阅读文档并与Boson玩了几分钟.
我应该使用Thor是因为它更受欢迎(因为我找不到任何其他地方可以照亮玻色子)或者我是否应该承担一段时间后Boson可能无法维护的风险,因为作者是唯一的贡献者?
虽然它只是一个人,但你可以看到他如何以极快的速度和卓越的品质进行编码.如果像他这样的更多贡献者为该图书馆做出贡献,那将会很棒.我真的希望更多的rubyists会使用它,因为它有很大的潜力成为所有系统自动化的脚本框架.就像后端的Rails一样.提交问题时,作者真的可以帮助您快速解决问题.
Thor只适用于外壳(我认为是它的目的),而玻色子,因为我认为它有3个主要功能.它允许您在shell中使用ruby(irb和脚本)中的代码,并且您可以拥有所有Ruby代码的精美集合,而无需修改.
我一直想要一个框架作为我的后端脚本框架,现在我不必重新发明轮子.似乎玻色子可能就是这样.
有人使用过这两个库并且可以分享一些想法吗?
在哪里可以找到使用RSpec测试Thor脚本的好例子?
到目前为止,我的搜索没有任何好处.
在命令行上调用thor命令时,这些方法按其模块/类结构命名,例如
class App < Thor
desc 'hello', 'prints hello'
def hello
puts 'hello'
end
end
Run Code Online (Sandbox Code Playgroud)
将使用该命令运行
thor app:hello
Run Code Online (Sandbox Code Playgroud)
但是,如果你通过推杆使自己可执行
App.start
Run Code Online (Sandbox Code Playgroud)
在底部你可以运行如下命令:
app hello
Run Code Online (Sandbox Code Playgroud)
有没有办法命名这些命令?例如,你可以打电话
app say:hello
app say:goodbye
Run Code Online (Sandbox Code Playgroud) 如何在--version
Ruby Thor命令行界面应用程序中添加选项.
例如,我希望能够运行
$ thor_app --version
> thor_app version 1.0.0
Run Code Online (Sandbox Code Playgroud)
此问题与不带参数或任务名称的Run a CLI Thor应用程序有关,但专门用于添加--version
不需要任务的选项.
注意
这是按照自答案格式编写的.鼓励添加答案和更新
我正在使用Thor并尝试将YAML输出到文件中.在irb中,我得到了我的期望.YAML格式的纯文本.但是当Thor的一个方法的一部分,它的输出是不同的......
class Foo < Thor
include Thor::Actions
desc "bar", "test"
def set
test = {"name" => "Xavier", "age" => 30}
puts test
# {"name"=>"Xavier", "age"=>30}
puts test.to_yaml
# !binary "bmFtZQ==": !binary |-
# WGF2aWVy
# !binary "YWdl": 30
File.open("data/config.yml", "w") {|f| f.write(test.to_yaml) }
end
end
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
my_gem你好name1 name2 name3给我一个
my_gem hello至少需要一个参数:my_gem hello name
我应该解析它们并用分隔符分隔参数吗?
例如
my_gem hello name1,name2,name3,nameN
在文件中它看起来像
class MyCLI < Thor
desc "hello NAMES", "say hello to names"
def hello(names)
say "hello #{names.split(',')}"
end
end
Run Code Online (Sandbox Code Playgroud)
或者无论如何要做到这一点?
使用Thor,可以使用method_option
设置特定任务的选项.要为类中的所有任务设置选项,可以使用class_option
.但是,如果一个人想要一个班级的某些任务,而不是全部,分享选项呢?
在以下task1
和task2
共享选项中,但它们不共享所有选项,并且它们不共享选项task3
.
require 'thor'
class Cli < Thor
desc 'task1', 'Task 1'
method_option :type, :type => :string, :required => true, :default => 'foo'
def task1
end
desc 'task2', 'Task 2'
method_option :type, :type => :string, :required => true, :default => 'foo'
method_option :value, :type => :numeric
def task2
end
desc 'task3', 'Task 3'
method_option :verbose, :type => :boolean, :aliases => '-v'
def task3
end
end
Cli.start(ARGV)
Run Code Online (Sandbox Code Playgroud)
与说明的问题method_option :type, :type …