I want to run a simple function, enter_to_continue on every rake task in a namespace开发者_JAVA技巧. currently I add that function at the end of every single task
however, it seems redundant, is there any way to run this function, enter_to_continue, to run at the end of every task of namespace 'mytest' automatically, by doing some meta programming?
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
You could try Rake::Task#enhance:
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: You may enhance the tasks also inside the definition block:
namespace :mytest do |ns|
  # 
  #...Task definitions...
  #
  ns.tasks.each{|tsk|
    tsk.enhance { puts "\treached method #{__method__}" }
  }
end
 
         
                                         
                                         
                                         
                                        ![Interactive visualization of a graph in python [closed]](https://www.devze.com/res/2023/04-10/09/92d32fe8c0d22fb96bd6f6e8b7d1f457.gif) 
                                         
                                         
                                         
                                         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论