class Cliprompt::Optionset
Attributes
aslist[R]
boolean[R]
choices[R]
default[R]
envdefault[R]
Public Class Methods
new(options = nil)
click to toggle source
# File lib/cliprompt/optionset.rb, line 10 def initialize(options = nil) @choices = [] @default = nil @boolean = false @envdefault = nil @aslist = false @type = options.class.name.downcase meth = "parse_#{@type}".to_sym if respond_to? meth send(meth, options) else fail OptionException, "Undefined parser ::#{meth}" end end
Public Instance Methods
ask_again(question, msg)
click to toggle source
# File lib/cliprompt/optionset.rb, line 165 def ask_again(question, msg) Cliprompt.shout msg Cliprompt.ask question, self end
check_boolean(question, answer)
click to toggle source
# File lib/cliprompt/optionset.rb, line 149 def check_boolean(question, answer) return ask_again(question, Cliprompt::MSG_YES_OR_NO) unless /^([yY1](es)?|[nN0](o)?)$/.match(answer) !/^[yY1](es)?$/.match(answer).nil? end
check_choices(question, answer)
click to toggle source
# File lib/cliprompt/optionset.rb, line 154 def check_choices(question, answer) return ask_again(question, Cliprompt::MSG_CHOSE_IN_LIST) unless @choices.include?(answer) answer end
check_default(question)
click to toggle source
# File lib/cliprompt/optionset.rb, line 144 def check_default(question) return ask_again(question, Cliprompt::MSG_MANDATORY_TEXT) if @default.nil? @default end
check_list(question, answer)
click to toggle source
# File lib/cliprompt/optionset.rb, line 159 def check_list(question, answer) return ask_again(question, Cliprompt::MSG_CHOSE_IN_LIST) unless answer.to_i < @choices.count return ask_again(question, Cliprompt::MSG_INPUT_A_NUMBER) unless /[0-9]+/.match(answer) @choices[answer.to_i] end
display()
click to toggle source
# File lib/cliprompt/optionset.rb, line 79 def display if @boolean display_boolean elsif @choices.count > 0 if @aslist display_list else display_choices end else display_default end end
display_boolean()
click to toggle source
# File lib/cliprompt/optionset.rb, line 93 def display_boolean @default ? "[Y/n] " : "[y/N] " end
display_choices()
click to toggle source
# File lib/cliprompt/optionset.rb, line 111 def display_choices back = '' if @choices.count > 0 back << "(#{@choices.join(' / ')}) " end back << display_default.to_s return back end
display_default()
click to toggle source
# File lib/cliprompt/optionset.rb, line 120 def display_default "[#{@default}] " if @default end
display_default_index()
click to toggle source
# File lib/cliprompt/optionset.rb, line 124 def display_default_index "[#{@choices.index(@default)}] " if @default end
display_list()
click to toggle source
# File lib/cliprompt/optionset.rb, line 97 def display_list back = "\n" choices.each_with_index do |choice, i| if @default == choice back << sprintf("> %-3s %s\n", i, choice) else back << sprintf(" %-3s %s\n", i, choice) end end back << "#{Cliprompt::MSG_CHOSE_A_NUMBER} " back << display_default_index.to_s return back end
parse_array(args)
click to toggle source
# File lib/cliprompt/optionset.rb, line 47 def parse_array(args) @choices = args.map(&:to_s).map do |a| if a[0] && a[0] == '=' @default = a[1..-1] else a end end @aslist = (@choices.count > 5) end
parse_fixnum(arg)
click to toggle source
# File lib/cliprompt/optionset.rb, line 58 def parse_fixnum(arg) @default = arg.to_s end
parse_float(arg)
click to toggle source
# File lib/cliprompt/optionset.rb, line 62 def parse_float(arg) @default = arg.to_s end
parse_hash(args)
click to toggle source
# File lib/cliprompt/optionset.rb, line 29 def parse_hash(args) @choices = args[:choices] || args['choices'] || [] parse_array @choices if args[:default] == false || args['default'] == false @default ||= false else @default ||= args[:default] || args['default'] end if args[:aslist] == false || args['aslist'] == false @aslist = false elsif args[:aslist] == true || args['aslist'] == true @aslist = true end @boolean = args[:boolean] || args['boolean'] @default = true if (@boolean && @default.nil?) @envdefault = args[:env] || args['env'] end
parse_nilclass(args)
click to toggle source
placeholder for nil type objects
# File lib/cliprompt/optionset.rb, line 26 def parse_nilclass(args) end
parse_string(arg)
click to toggle source
# File lib/cliprompt/optionset.rb, line 66 def parse_string(arg) if /^[yY1](es)?(\/)?[nN0](o)?/.match(arg) @boolean = true if /y(es)?(\/)?N/.match(arg) @default = false else @default = true end else @default = arg end end
validate(question, answer)
click to toggle source
# File lib/cliprompt/optionset.rb, line 128 def validate(question, answer) if answer == '' check_default question elsif @boolean check_boolean question, answer elsif @choices.count > 0 if @aslist check_list question, answer else check_choices question, answer end else answer end end