/ / Доступ до граблі Опис завдання зсередини Завдання - рубін, граблі

Доступ до грабіжницької задачі Опис зсередини Завдання - рубій, граблі

Як в задачі на граблі виходить запит на опис? Щось, що дасть:

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

Відповіді:

17 за відповідь № 1

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.


1 для відповіді № 2

Маючи подібну проблему, я хотів показати користувачеві налаштований екран довідки. Відповідь тут мені дуже допомогла.

Це дуже важливо

Rake::TaskManager.record_task_metadata = true

робиться до першого визначення завдань.

Тоді ти можеш це зробити

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

Деталі можна дізнатися, дослідивши https://github.com/jimweirich/rake/blob/master/lib/rake/application.rb#L284