Подтвердить что ты не робот

Запустите приложение CLI Thor без аргументов или имени задачи

Я ищу способ создания приложения командной строки, которое будет запускать метод по умолчанию без каких-либо аргументов. Я возился с опцией Toror default_method, но все же требует, чтобы я передал аргумент. Я нашел аналогичный случай, где кто-то хотел запустить задачу CLI Thor с аргументами, но без имени задачи.

Я хотел бы запустить задачу без имени задачи и без аргументов. Возможно ли это?

4b9b3361

Ответ 1

Кажется, что правильным способом Thor-way это использовать 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

Ответ 2

Какой-то хакерский, но в любом случае только одно определенное действие, я просто добавил имя действия в массив 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:   [email protected]:#{str}"
      puts "HTTPS: https://[email protected]/#{str}"
    else
      str = "FreedomBen/#{repo}.git"
      puts "SSH:   [email protected]:#{str}"
      puts "HTTPS: https://github.com/#{str}"
    end 
  end 
end

Затем, когда я запускаю класс, передавая в ARGV:

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

Ответ 3

Хотя это немного хакерский, я решил аналогичную проблему, поймав опцию в качестве самого аргумента:

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.