class ListPicker::Picker
Public Class Methods
new(array, options = {})
click to toggle source
# File lib/list_picker.rb, line 6 def initialize(array, options = {}) @options = { label_method: :to_s }.merge(options) @array = array end
Public Instance Methods
ask(question, &validation_block)
click to toggle source
# File lib/list_picker.rb, line 14 def ask(question, &validation_block) puts "" puts "#{question}: " puts "" @array.each_with_index do |item, index| puts "#{(index + 1).to_s.rjust(2)}) #{item.send(@options[:label_method].to_sym)}" end puts "" print "> " default_validation_block = Proc.new do |item| item.to_i > 0 && item.to_i <= @array.size end if preselected_option = ARGV.shift input = preselected_option else input = gets.chomp end unless block_given? validation_block = default_validation_block end unless validation_block.call(input) $stderr.puts "" $stderr.puts "Invalid selection, please try again" return ask(question, &validation_block) end selected = @array[input.to_i - 1] puts "" puts "Selected item: #{selected.send(@options[:label_method].to_sym)}" puts "" return selected end