Is it possible to call a specific task first, when i run a thor task?
my Thorfile:
class Db < Thor
desc "show_Version", "some description ..."
def show_version # <= needs a database connection
puts ActiveRecord::Migrator.current_version
end
private
def connect_to_database # <= call this always when a task from this file is executed
# connect here to database
end
end
I could write the "connect_to_database" method in every task but that seems not very DRY.
You can use invoke
to run other tasks:
def show_version
invoke :connect_to_database
# ...
end
That will also make sure that they are run only once, otherwise you can just call the method as usual, e.g.
def show_version
connect_to_database
# ...
end
Or you could add the call to the constructor, to have it run first in every invocation:
def initialize(*args)
super
connecto_to_database
end
The call to super
is very important, without it Thor will have no idea what to do.
A rather under-documented feature of thor is the method default_task
. Passed a symbol from within your thor script, you can set it to run a specific task and, using invoke, run other tasks.
For example:
default_task :connect_to_database
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