Sha256: a42dfc7b7aa31f6b278c6bb4dcab787e190df5916e931e5a69bd2ad42d230dba
Contents?: true
Size: 1009 Bytes
Versions: 11
Compression:
Stored size: 1009 Bytes
Contents
module Stairs module Util module CLI class << self def get(prompt) print prompt response = $stdin.gets.strip response.present? ? response : nil end def collect(*args, &block) Collector.new(*args, &block).run end end private class Collector def initialize(prompt, options={}, &block) @prompt = prompt @options = options.reverse_merge required: true @validator = block end def run times, value = 0, nil until valid?(value, times) value = CLI.get(prompt.blue) times += 1 end value end private def valid?(value, times) if validator validator.call(value, times) else !!value || (!options[:required] && times > 0) end end attr_reader :prompt, :options, :validator end end end end
Version data entries
11 entries across 11 versions & 1 rubygems