Class: Babushka::Prompt

Inherits:
Object show all
Extended by:
LogHelpers
Defined in:
lib/babushka/prompt.rb

Defined Under Namespace

Modules: Helpers

Class Method Summary (collapse)

Methods included from LogHelpers

debug, log, log_block, log_error, log_ok, log_verbose, log_warn

Class Method Details

+ (Object) confirm(message, opts = {}, &block)



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/babushka/prompt.rb', line 25

def confirm message, opts = {}, &block
  prompter = (!opts[:always_ask] && respond_to?(:var)) ? :var : :get_value
  answer = send(prompter, message,
    :message => message,
    :confirmation => true,
    :default => (opts[:default] || 'y')
  ).starts_with?('y')

  if block.nil?
    answer
  elsif answer
    block.call
  elsif opts[:otherwise]
    log opts[:otherwise]
  end
end

+ (Object) get_ip(message, opts = {})



42
43
44
45
46
47
48
# File 'lib/babushka/prompt.rb', line 42

def get_ip message, opts = {}
  get_value(message, opts.merge(
    :retry => "That's not an IP, like '10.0.1.1'."
  )) {|value|
    IP.new(value).valid?
  }
end

+ (Object) get_ip_range(message, opts = {})



50
51
52
53
54
55
56
# File 'lib/babushka/prompt.rb', line 50

def get_ip_range message, opts = {}
  get_value(message, opts.merge(
    :retry => "That's not an IP range, like '10.0.1.x'."
  )) {|value|
    IPRange.new(value).valid?
  }
end

+ (Object) get_path(message, opts = {})



58
59
60
61
62
63
64
# File 'lib/babushka/prompt.rb', line 58

def get_path message, opts = {}
  get_value(message, opts.merge(
    :retry => "Doesn't exist, or not a directory."
  )) {|value|
    (value || '').p.dir?
  }
end

+ (Object) get_value(message, opts = {}, &block)



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/babushka/prompt.rb', line 66

def get_value message, opts = {}, &block
  if opts[:choices] && opts[:choice_descriptions]
    raise ArgumentError, "You can't use the :choices and :choice_descriptions options together."
  elsif opts[:choice_descriptions]
    opts[:choices] = opts[:choice_descriptions].keys
  end
  if opts[:choices] && opts[:choices].any? {|c| !c.is_a?(String) }
    raise ArgumentError, "Choices must be passed as strings."
  end
  opts.defaults! :prompt => '? '
  prompt_and_read_value prompt_message(message, opts), opts.merge(:ask => !Base.task.opt(:defaults)), &block
end