Sha256: 9254959b9045f210b37dee2691fb3e968190b29244e653506707e06f7112ceca

Contents?: true

Size: 1006 Bytes

Versions: 1

Compression:

Stored size: 1006 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

      class Collector
        def initialize(prompt, options = {}, &block)
          @prompt = prompt
          @options = options.reverse_merge required: true
          @validator = block
        end

        def run
          times = 0
          value = 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

1 entries across 1 versions & 1 rubygems

Version Path
stairs-0.10.0 lib/stairs/util/cli.rb