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