lib/cliprompt/optionset.rb in cliprompt-0.0.3 vs lib/cliprompt/optionset.rb in cliprompt-0.0.4
- old
+ new
@@ -3,17 +3,18 @@
class OptionException < StandardError
end
class Optionset
- attr_reader :choices, :default, :boolean, :envdefault
+ attr_reader :choices, :default, :boolean, :envdefault, :aslist
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
@@ -30,10 +31,15 @@
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
@@ -43,10 +49,11 @@
@default = a[1..-1]
else
a
end
end
+ @aslist = (@choices.count > 5)
end
def parse_fixnum(arg)
@default = arg.to_s
end
@@ -85,11 +92,15 @@
if answer == ''
check_default question
elsif @boolean
check_boolean question, answer
elsif @choices.count > 0
- check_choices question, answer
+ if @aslist
+ check_list question, answer
+ else
+ check_choices question, answer
+ end
else
answer
end
end
@@ -104,9 +115,14 @@
end
def check_choices(question, answer)
return ask_again(question, Cliprompt::MSG_CHOSE_IN_LIST) unless @choices.include?(answer)
answer
+ end
+
+ def check_list(question, answer)
+ return ask_again(question, Cliprompt::MSG_CHOSE_IN_LIST) unless answer.to_i < @choices.count
+ @choices[answer.to_i]
end
def ask_again(question, msg)
Cliprompt.shout msg
Cliprompt.ask question, self