30

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

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

4

3 回答 3

59

似乎正确的 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
于 2011-08-31T07:01:26.680 回答
6

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

class GitTranslate < Thor
  desc "translate <repo-name>", "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"))
于 2015-04-19T18:51:50.173 回答
0

虽然它有点骇人听闻,但我通过将选项作为参数本身解决了一个类似的问题:

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

于 2013-12-02T21:27:09.670 回答