簡體   English   中英

運行不帶參數或任務名稱的CLI Thor應用程序

[英]Run a CLI Thor app without arguments or task name

我正在尋找一種方法來創建一個命令行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 <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"))

雖然它有點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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM