/ / Access Rake Opis zadania z poziomu Task - ruby, rake

Uzyskaj dostęp do zadania Rake z poziomu Zadania - ruby, rake

W ramach zadania rake, w jaki sposób można wyszukać opis? Coś, co dałoby:

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

Odpowiedzi:

17 dla odpowiedzi nr 1

taskmusi być zdefiniowany jako parametr dla bloku zadań.

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

Edytować: To rozwiązanie działa z prowizją 0.8.7. Przynajmniej rake 0.9.2.2 potrzebuje dodatkowego Rake::TaskManager.record_task_metadata = true (Sprawdziłem tylko te dwie wersje).

Samodzielny skrypt ruby ​​z adaptacją:

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

Powód: w rake/task_manager.rb linia 30 (prowizja 0.9.2.2) to czek

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

Domyślny false jest ustawiony w linii 305.


1 dla odpowiedzi nr 2

Mam podobny problem, że chciałem pokazać użytkownikowi spersonalizowany ekran pomocy. Odpowiedź tutaj bardzo mi pomogła.

To bardzo ważne

Rake::TaskManager.record_task_metadata = true

odbywa się przed pierwszą definicją zadań.

Wtedy możesz to zrobić

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

Szczegóły można znaleźć, badając https://github.com/jimweirich/rake/blob/master/lib/rake/application.rb#L284