Доступ к Rake Task Description изнутри задачи - PullRequest
11 голосов
/ 09 января 2012

В грабли, как запросить описание? Что-то, что дало бы:

desc "Populate DB"
task populate: :environment do
  puts task.desc # "Populate DB"
end

Ответы [ 2 ]

17 голосов
/ 09 января 2012

task должен быть определен как параметр для блока задач.

desc "Populate DB"
task :populate do |task|
  puts task.comment # "Populate DB"
  puts task.full_comment # "Populate DB"
  puts task.name # "populate "
end

Редактировать: Это решение работает с граблями 0.8.7.По крайней мере для рейка 0.9.2.2 требуется дополнительный Rake::TaskManager.record_task_metadata = true (я проверил только эти две версии).

Автономный скрипт ruby ​​с адаптацией:

gem 'rake'    #'= 0.9.2.2'
require 'rake'

#Needed for rake/gem '= 0.9.2.2'
Rake::TaskManager.record_task_metadata = true

desc "Populate DB"
task :populate do |task|
  p task.comment # "Populate DB"
  p task.full_comment # "Populate DB"
  p task.name # "populate "
end

if $0 == __FILE__
  Rake.application['populate'].invoke()  #all tasks
end

Причина: в rake/task_manager.rb строка 30 (грабли 0.9.2.2) - это проверка

  if Rake::TaskManager.record_task_metadata
    add_location(task)
    task.add_description(get_description(task))
  end

Значение по умолчанию false установлено в строке 305.

2 голосов
/ 31 июля 2014

Возникла похожая проблема, я хотел показать пользователю настроенный экран справки.Ответ мне очень помог.

Очень важно, чтобы

Rake::TaskManager.record_task_metadata = true

было выполнено до первого определения задач.

Тогда вы можете выполнить

Rake.application.tasks.each do |t|
    printf("%-}s  # %s\n",
           t.name_with_args,
           t.comment)
  end

Подробности можно узнать, исследовав https://github.com/jimweirich/rake/blob/master/lib/rake/application.rb#L284

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...