Search code examples
rake

Is it possible to make an interactive Rake task?


I want to run a Rake task that asks the user for input.

I know that I can supply input on the command line, but I want to ask the user if they are sure they want to proceed with a particular action in case they mistyped one of the values supplied to the Rake task.


Solution

  • Something like this might work

    task :action do
      STDOUT.puts "I'm acting!"
    end
    
    task :check do
      STDOUT.puts "Are you sure? (y/n)"
      input = STDIN.gets.strip
      if input == 'y'
        Rake::Task["action"].reenable
        Rake::Task["action"].invoke
      else
        STDOUT.puts "So sorry for the confusion"
      end
    end
    

    Task reenabling and invoking from How to run Rake tasks from within Rake tasks?