Ruby - Thor сначала выполняет определенную задачу - PullRequest
7 голосов
/ 11 ноября 2010

Можно ли сначала вызвать определенную задачу, когда я запускаю задачу тор?

мой Торфиле:

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

Я мог бы написать метод "connect_to_database" в каждой задаче, но это выглядит не очень СУХОЙ.

Ответы [ 2 ]

12 голосов
/ 11 ноября 2010

Вы можете использовать invoke для запуска других задач:

def show_version
  invoke :connect_to_database
  # ...
end

Это также гарантирует, что они запускаются только один раз, в противном случае вы можете просто вызвать метод как обычно, например,

def show_version
  connect_to_database
  # ...
end

Или вы можете добавить вызов в конструктор, чтобы он запускался первым при каждом вызове:

def initialize(*args)
  super
  connecto_to_database
end

Звонок на super очень важен, без него Тор не будет знать, что делать.

1 голос
/ 23 февраля 2011

Довольно недокументированной особенностью является метод default_task.Пропустив символ из вашего скрипта тор, вы можете настроить его на выполнение определенной задачи и, используя invoke, запустить другие метки.

т.е.

...