运行不带参数或任务名称的CLI Thor应用程序

我正在寻找一种方法来创建一个命令行Thor应用程序,它将运行一个没有任何参数的默认方法。 我摆弄了Thor的default_method选项,但仍然要求我传入一个参数。 我发现了一个类似的情况 ,有人想要使用参数运行CLI Thor任务但没有任务名称。

我想运行一个没有任务名称和参数的任务。 这样的事情可能吗?

看来正确的Thor方式是使用default_task

 class Commands < Thor desc "whatever", "The default task to run when no command is given" def whatever ... end default_task :whatever end Commands.start 

如果由于某种原因而不是你需要的东西,你应该能够做类似的事情

 class Commands < Thor ... end if ARGV.empty? # Perform the default, it doesn't have to be a Thor task Commands.new.whatever else # Start Thor as usual Commands.start end 

有点hackish,但是无论如何只有一个定义的动作,我只是将动作名称添加到传入的ARGV数组中:

 class GitTranslate < Thor desc "translate ", "Obtain a full url given only a repo name" option :bitbucket, type: :boolean, aliases: 'b' def translate(repo) if options[:bitbucket] str = "freedomben/#{repo}.git" puts "SSH: git@bitbucket.org:#{str}" puts "HTTPS: https://freedomben@bitbucket.org/#{str}" else str = "FreedomBen/#{repo}.git" puts "SSH: git@github.com:#{str}" puts "HTTPS: https://github.com/#{str}" end end end 

然后我通过传递ARGV开始课程:

 GitTranslate.start(ARGV.dup.unshift("translate")) 

虽然它有点hackish,但我通过将选项作为参数本身来解决类似的问题:

 argument :name def init if name === '--init' file_name = ".blam" template('templates/blam.tt', file_name) unless File.exists?(file_name) exit(0) end end 

当在Thor::Group运行时,此方法在其他人之前执行,并让我欺骗程序响应像参数这样的选项。

此代码来自https://github.com/neverstopbuilding/blam 。