ruby - tutorial - Ejecute una aplicación CLI Thor sin argumentos o nombre de tarea
que es una tarea en project (3)
Estoy buscando una manera de crear una aplicación thor de línea de comandos que ejecute un método predeterminado sin ningún argumento. Jugué con la opción default_method de Thor, pero aún así requiere que pase un argumento. Encontré un caso similar en el que alguien quería ejecutar una tarea de CLI Thor con argumentos pero sin un nombre de tarea.
Me gustaría ejecutar una tarea sin nombre de tarea y sin argumentos. ¿Es posible tal cosa?
Si bien es un poco intrincado, resolví un problema similar al capturar la opción como el argumento en sí:
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
Cuando se ejecuta en un Thor::Group
este método se ejecuta antes que otros y me permite engañar al programa para que responda a una opción como argumento.
Este código es de https://github.com/neverstopbuilding/blam .
Tipo de piratería, pero donde de todos modos solo hay una acción definida, simplemente puse el nombre de la acción en la matriz ARGV
que se pasa:
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
Luego, donde comienzo la clase pasando ARGV:
GitTranslate.start(ARGV.dup.unshift("translate"))
Parece que la forma correcta de Thor para hacer esto es usar 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
Si por alguna razón no es lo que necesita, debería poder hacer algo como
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