class Vagrant::Action::Builtin::Confirm

This class asks the user to confirm some sort of question with a ā€œY/Nā€ question. The only parameter is the text to ask the user. The result is placed in ā€˜env` so that it can be used with the {Call} class.

Public Class Methods

new(app, env, message, force_key=nil, **opts) click to toggle source

For documentation, read the description of the {Confirm} class.

@param [String] message The message to ask the user. @param [Symbol] force_key The key that if present and true in

the environment hash will skip the confirmation question.
# File lib/vagrant/action/builtin/confirm.rb, line 14
def initialize(app, env, message, force_key=nil, **opts)
  @app      = app
  @message  = message
  @force_key = force_key
  @allowed  = opts[:allowed]
end

Public Instance Methods

call(env) click to toggle source
# File lib/vagrant/action/builtin/confirm.rb, line 21
def call(env)
  choice = nil

  # If we have a force key set and we're forcing, then set
  # the result to "Y"
  choice = "Y" if @force_key && env[@force_key]

  if !choice
    while true
      # If we haven't chosen yes, then ask the user via TTY
      choice = env[:ui].ask(@message)

      # If we don't have an allowed set just exit
      break if !@allowed
      break if @allowed.include?(choice)
    end
  end

  # The result is only true if the user said "Y"
  env[:result] = choice && choice.upcase == "Y"
  env["#{@force_key}_result".to_sym] = env[:result]

  @app.call(env)
end