[英]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
運行時,此方法在其他人之前執行,並讓我欺騙程序響應像參數這樣的選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.