I'm looking for a way to create a command-line thor app that will run a default method without any arguments. I fiddled with Thor's default_method option, but still requires that I pass in an argument. I found a similar case where someone wanted to run a CLI Thor task with arguments but without a task name.
I'd like to run a task with no task name and no arguments. Is such a thing possible?
It seems the proper Thor-way to do this is using 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
If for whatever reason that isn't what you need, you should be able to do something like
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
Kind of hackish, but where there's only one defined action anyway, I just prepended the action name to the ARGV
array that gets passed in:
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
Then where I start the class by passing in ARGV:
GitTranslate.start(ARGV.dup.unshift("translate"))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With