как запустить функцию для каждой задачи пространства имен с помощью команды rake - PullRequest
2 голосов
/ 12 мая 2011

Я хочу запустить простую функцию enter_to_continue для каждой задачи rake в пространстве имен.в настоящее время я добавляю эту функцию в конце каждой отдельной задачи

, однако она кажется излишней, есть ли способ запустить эту функцию, enter_to_continue, для автоматического запуска в конце каждой задачи пространства имен «mytest»,занимаясь метапрограммированием?

namespace :mytest do
  task :foo do
    system "date"
    enter_to_continue
  end

  task :bar do 
    system "ls"
    enter_to_continue
  end

  # ...
  # Let's say 10 more tasks ends with enter_to_continue comes after 
  # ...
end

def enter_to_continue
  STDIN.gets.chomp
end

1 Ответ

1 голос
/ 22 мая 2011

Вы можете попробовать улучшить Rake :: Task #:

require 'rake'

ns = namespace :mytest do

  task :foo do |t|
    puts "You called task #{t}"
  end

  task :bar do |t|
    puts "You called task #{t}"
  end

  # ...
  # Let's say 10 more tasks ends with enter_to_continue comes after 
  # ...
end

#
#Add actions to each task (e.g. enter_to_continue)
#
ns.tasks.each{|tsk|
  tsk.enhance { puts "\treached method #{__method__}" }
}

#Test the result
task :default => "mytest:foo"
task :default => "mytest:bar"
if $0 == __FILE__
  Rake.application[:default].invoke
end

Edit: Вы можете улучшить задачи также внутри блока определения:

namespace :mytest do |ns|
  # 
  #...Task definitions...
  #
  ns.tasks.each{|tsk|
    tsk.enhance { puts "\treached method #{__method__}" }
  }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...